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

Java 四捨五入保留小數的四種常用方法

     編輯:Java 相關知識

在 Java 開發中,處理浮點數精度並四捨五入保留指定小數位是常見需求。本文整理了四種主流實現方式,涵蓋 BigDecimal、DecimalFormat、String.format 以及 Math.round,並說明各自適用場景與注意事項。

方法一:BigDecimal(推薦用於金融計算)

BigDecimal 提供精確的小數運算,避免浮點數誤差,適合金融、會計等對精度要求極高的場景。

double f = 3.1516;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// 結果:3.15

關鍵點:

  • 建議使用 BigDecimal(String) 構造器或 BigDecimal.valueOf(double) 避免二進制浮點數轉換誤差。
  • setScale(scale, roundingMode) 中 ROUND_HALF_UP 表示四捨五入,其他模式如 ROUND_DOWN(截斷)、ROUND_UP(進一)可按需選擇。

方法二:DecimalFormat(格式化輸出為字串)

適用於直接將數字格式化為特定模式的字串,如報表顯示、日誌記錄。

String result = new java.text.DecimalFormat("#.00").format(3.1415926);
// 結果:"3.14"
// #.00 代表保留兩位小數,#.0000 代表四位,以此類推

注意: 返回值為 String,若需繼續運算需再轉回數值型別。

方法三:String.format / printf(簡潔易讀)

利用格式化佔位符 %.nf(n 為小數位數),語法直觀,常用於快速輸出或日誌。

double d = 3.1415926;
String result = String.format("%.2f", d);
// 結果:"3.14"
// %.2f 中:% 表示格式化,.2 表示小數點後兩位,f 表示浮點數

方法四:Math.round(簡易整數運算技巧)

透過乘以 10 的 n 次方、四捨五入、再除以相應倍數,實現保留 n 位小數。但因浮點數精度問題,可能產生如 3.1499999999 這類結果,不建議用於精度敏感場景。

double val = 5.2644555;
double rounded = Math.round(val * 100) * 0.01d;
// 結果:5.26(但可能出現 5.260000000000001)

總結與建議

方法返回型別精度適用場景
BigDecimaldouble / BigDecimal高(精確)金融計算、精密科學計算
DecimalFormatString高報表顯示、字串輸出
String.formatString高快速格式化、日誌輸出
Math.rounddouble低(有誤差)非關鍵業務、簡單演示

實務上,涉及金額、利率等精度敏感業務務必使用 BigDecimal;單純顯示用途則可選 DecimalFormat 或 String.format 以簡化代碼。

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