問題
在進行浮點數計算時,發現計算結果與期望存在細微的差異
解決方案
代碼
public static void main(String[] args) {
System.out.println(new BigDecimal(0.000369).toPlainString());
System.out.println(new BigDecimal(new Double(0.000369)).toPlainString());
System.out.println(new BigDecimal("0.000369").toPlainString());
System.out.println(new BigDecimal(Double.toString(0.000369)).toPlainString());
}
執行結果
可以發現,直接使用Double
類型時,會存在精度的誤差,使用Double.toString()
方法可以規避。查看Double
類,可以看到它使用的是FloatingDecimal.toJavaFormatString()
方法,底層基於IEEE 754
標準。
結論
在進行浮點數計算時,可使用Double.toString()
方法轉換爲String
,再使用BigDecimal
進行計算