首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Math.floor、round、ceil 三大取整方法深度解析與對比

     編輯:Java 相關知識

Java java.lang.Math 提供了三個常用的取整方法:floor(向下取整)、round(四捨五入)、ceil(向上取整)。它們對正負數的處理邏輯不同,開發中常因混淆導致 Bug。本文通過定義、對比表、實測代碼全方位解析,助你徹底掌握。

一、核心定義

  • Math.floor(double a):返回 ≤ 參數的最大整數(向負無窮方向取整)
  • Math.round(double a):四捨五入,等同 (long)Math.floor(a + 0.5),返回 long;float 版返回 int
  • Math.ceil(double a):返回 ≥ 參數的最小整數(向正無窮方向取整)

二、正負數對比表(含實測結果)

輸入floorroundceil
1.41.012.0
1.51.022.0
1.61.022.0
-1.4-2.0-1-1.0
-1.5-2.0-1-1.0
-1.6-2.0-2-1.0

關鍵觀察:

  • floor 永遠向更小方向:-1.4 → -2,-1.6 → -2
  • ceil 永遠向更大方向:-1.4 → -1,-1.6 → -1
  • round 正數四捨五入,負數「向零偏移」:-1.5 → -1(而非 -2),因 floor(-1.5 + 0.5) = floor(-1.0) = -1

三、驗證代碼(可直接運行)

public class MathRoundTest {
    public static void main(String[] args) {
        double[] nums = {1.4, 1.5, 1.6, -1.4, -1.5, -1.6};
        for (double n : nums) test(n);
    }
    private static void test(double n) {
        System.out.printf("Math.floor(%.1f)=%.1f%n", n, Math.floor(n));
        System.out.printf("Math.round(%.1f)=%d%n", n, Math.round(n));
        System.out.printf("Math.ceil(%.1f)=%.1f%n", n, Math.ceil(n));
        System.out.println("---");
    }
}

四、返回類型差異

  • floor/ceil:返回 double(如 1.0、-2.0)
  • round(double):返回 long
  • round(float):返回 int

若需 int,可強轉:(int)Math.round(d),注意溢出風險。

五、常見陷阱與最佳實踐

  1. 負數四捨五入直覺陷阱:以為 -1.5 → -2,實際 -1。記住公式 floor(x + 0.5) 即可推導。
  2. 精度問題:浮點數如 2.675 可能因二進制表示誤差導致 round 結果不符預期。金融計算請用 BigDecimal.setScale(RoundingMode.HALF_UP)。
  3. 性能:三者均為 native 方法,極快,無需優化。

六、總結速查

| 方法 | 方向 | 正數表現 | 負數表現 | 返回類型 | |------|------|----------|----------|----------| | floor | 向下(負無窮) | 去小數 | 變更小(-1.1→-2) | double | | round | 四捨五入 | 標準 | 向零偏移(-1.5→-1) | long/int | | ceil | 向上(正無窮) | 進一 | 變更大(-1.1→-1) | double |

下次遇到取整需求,先問自己:要向下、向上、還是四捨五入?負數怎麼處理? 對號入座,零失誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved