今天遇到一個比較有意思的問題,就是兩個浮點數相加怎么都得不到正確的答案,剛開始也很納悶,后來通過在網上找資料后,明白了原來浮點數用2進制進行加減的話確實是會出現這種情況的,也找到了解決辦法,所以記錄下來,也算是一個比較有意思的認識吧!
首先我們來看看兩個帶小數的浮點數相加會是什么樣子的
package com.controller; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub double a = 418.48d; double b = 7121.88d; double c = a+b; System.out.println(c); } }
輸出結果為
7540.360000000001
原因是浮點數的二進制相計算的時候會有一定的誤差,原因我們下次再深入探討,下面我們來看解決辦法
package com.controller; import java.math.BigDecimal; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub double a = 418.48d; double b = 7121.88d; BigDecimal a1 = new BigDecimal(String.valueOf(a)); BigDecimal b1 = new BigDecimal(String.valueOf(b)); BigDecimal c = a1.add(b1); System.out.println(c.doubleValue()); } }
輸出結果為
7540.36