程式碼對比
BigDecimal number = new BigDecimal(18.9045613);
System.out.println(number.setScale(2, RoundingMode.UP)); // 18.91
System.out.println(number.setScale(2, BigDecimal.ROUND_HALF_UP)); // 18.90
模式語意差異
| 模式 | 行為 | 本例結果 |
RoundingMode.UP | 遠離零方向無條件進位(只要捨棄位非零即進 1) | 18.904... → 18.91 |
ROUND_HALF_UP | 四捨五入:捨棄位 ≥ 5 進位,否則捨去 | 18.904... → 18.90 (第三位為 4) |
關鍵觀念
UP:絕對進位,正數向正無限大、負數向負無限大。
HALF_UP:傳統四捨五入,看緊鄰捨棄位是否 ≥ 5。
- 其他常用:
DOWN (截斷)、HALF_EVEN (銀行家捨入)、CEILING/FLOOR (向正/負無限大)。
最佳實務
- 財務金額四捨五入請使用
RoundingMode.HALF_UP 或 HALF_EVEN。
- 建構
BigDecimal 時優先使用字串建構子 new BigDecimal("18.9045613") 避免 double 二進位誤差。
- 統一使用
RoundingMode 列舉(Java 1.5+),避免舊常數 BigDecimal.ROUND_*。
總結
RoundingMode.UP 是無條件進位,非四捨五入。若需標準四捨五入,請使用 RoundingMode.HALF_UP。並建議以字串建構 BigDecimal 確保精度。
- 上一篇文章: C 語言字串列印 N 字圖形:演算法分析與完整實作
- 下一篇文章: JSP 連接資料庫錯誤定位:依據堆疊追蹤行號快速排查
Copyright ©
程式碼之家 All Rights Reserved