Java計算double精度問題
阿新 • • 發佈:2019-02-17
分析:
- 我們在一些計算的時候,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
完美的解決了上面的問題。