Java java.lang.Math 類提供了三個核心取整方法,行為差異較大,尤其在負數處理上容易踩坑。本文通過完整案例表格詳細對比。
返回小於或等於參數的最大整數值(double 類型)。
| 輸入 | 結果 | 說明 |
|---|---|---|
| 2.0 | 2.0 | 整數不變 |
| 2.1 | 2.0 | 捨去小數部分 |
| 2.5 | 2.0 | 捨去小數部分 |
| 2.9 | 2.0 | 捨去小數部分 |
| -2.0 | -2.0 | 整數不變 |
| -2.1 | -3.0 | 向更小方向(-3 < -2.1) |
| -2.5 | -3.0 | 向更小方向 |
| -2.9 | -3.0 | 向更小方向 |
返回大於或等於參數的最小整數值(double 類型)。
| 輸入 | 結果 | 說明 |
|---|---|---|
| 2.0 | 2.0 | 整數不變 |
| 2.1 | 3.0 | 進位到下一個整數 |
| 2.5 | 3.0 | 進位 |
| 2.9 | 3.0 | 進位 |
| -2.0 | -2.0 | 整數不變 |
| -2.1 | -2.0 | 向更大方向(-2 > -2.1) |
| -2.5 | -2.0 | 向更大方向 |
| -2.9 | -2.0 | 向更大方向 |
返回最接近參數的 long/int 值。正數加 0.5 後向下取整,負數減 0.5 後向上取整。
| 輸入 | 結果 | 說明 |
|---|---|---|
| 2.0 | 2 | |
| 2.1 | 2 | |
| 2.5 | 3 | .5 向上 |
| 2.9 | 3 | |
| -2.0 | -2 | |
| -2.1 | -2 | |
| -2.5 | -2 | -.5 向上(朝向零) |
| -2.9 | -3 |
0.5 向正無窮方向(正數變大、負數變小/向零)(total + size - 1) / size 或 Math.ceil((double)total / size)Math.floor 或整數除法BigDecimal 並指定 RoundingMode掌握三者在正負數邊界上的行為差異,能有效避免業務邏輯中的取整錯誤。