double類型丟精度問題

問題

在進行浮點數計算時,發現計算結果與期望存在細微的差異

解決方案

代碼
    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進行計算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章