Java計算double精度問題

分析:

  1. 我們在一些計算的時候,double類型的數據,經常會有精度丟失問題。
    例如:
        System.out.println(0.09 + 0.01);
        System.out.println(1 - 0.32);
        System.out.println(1.015 * 100);
        System.out.println(1.301 / 100);
        //運行結果分別是:
        //0.09999999999999999
        //0.6799999999999999
        //101.49999999999999
        //0.013009999999999999
這樣的數據往往不是我們想要的,看起來雖然很小,如果是關於金融的項目,後果就很嚴重了。
那麼我們應該怎麼解決此問題呢?
    查看Java的api,找到了BigDecimal這個類,可以解決這個問題。
        BigDecimal bd1 = new BigDecimal("0.09");
        BigDecimal bd2 = new BigDecimal("0.01");
        System.out.println(bd1.add(bd2));//加法

        BigDecimal bd3 = new BigDecimal("1");
        BigDecimal bd4 = new BigDecimal("0.32");
        System.out.println(bd3.subtract(bd4));//減法

        BigDecimal bd5 = new BigDecimal("1.015");
        BigDecimal bd6 = new BigDecimal("100");
        System.out.println(bd5.multiply(bd6));//乘法

        BigDecimal bd7 = new BigDecimal("1.301");
        BigDecimal bd8 = new BigDecimal("100");
        System.out.println(bd7.divide(bd8));//除法
輸出結果爲:
        0.10
        0.68
        101.500
        0.01301

完美的解決了上面的問題。

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