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

Java 四捨五入保留小數的四種主流實現方式對比

     編輯:Java 綜合教學

Java 四捨五入保留小數的四種主流實現方式對比

Java 中處理浮點數精度與格式化輸出是高頻需求,本文總結四種主流方案,對比適用場景與精度陷阱,助你選擇最佳實踐。

方式一:BigDecimal(金融級精確計算首選)

double f = 3.1516;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
// 結果:3.15
  • ✅ 精確控制捨入模式(ROUND_HALF_UP 等 8 種模式)
  • ✅ 避免浮點數二進制表示誤差
  • ⚠️ 較繁瑣,建議封裝工具類

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

new DecimalFormat("#.00").format(3.1415926);  // "3.14"
new DecimalFormat("#.0000").format(3.1415926); // "3.1416"
  • ✅ 靈活格式模板(#.00 兩位、#.0000 四位)
  • ✅ 直接返回字符串,適合展示層
  • ⚠️ 返回 String,後續計算需再轉型

方式三:String.format / printf(C 風格格式化)

double d = 3.1415926;
String result = String.format("%.2f", d);  // "3.14"
// %.2f 含義:% 佔位符、.2 保留兩位小數、f 浮點型
  • ✅ 簡潔熟悉,標準庫無依賴
  • ✅ 支持多種格式化選項(對齊、補零等)
  • ⚠️ 同樣返回 String

方式四:Math.round 乘除法(簡易整數運算)

Math.round(5.2644555 * 100) * 0.01d;  // 5.26
  • ⚠️ 僅適用於正數、非精度敏感場景
  • ⚠️ 大數值可能溢出,浮點乘除仍有精度損失
  • ❌ 不推薦用於金融/科學計算

選型建議

場景推薦方式理由
金融計算、精度敏感業務BigDecimal可控捨入模式,無二進制誤差
前端展示、報表導出DecimalFormat / String.format直接得字符串,模板靈活
簡單臨時計算、非關鍵路徑String.format代碼最少,可讀性好
高性能、大批量數值處理BigDecimal + 快取/對象池避免頻繁創建對象開銷

避坑提醒

  • new BigDecimal(double) 會攜帶 double 的二進制誤差,建議用 new BigDecimal(String) 或 BigDecimal.valueOf(double)。
  • 序列化傳輸時保持數值類型,由前端格式化,避免後端強制轉 String 導致二次解析誤差。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved