[注意]這邊主要只是資料整理,非本人文筆。
介紹:
Java、JavaScript、Python等由於遵合IEEE 754浮點數演算(Floating-point artihmetic)規範,使用分數與指數來表示浮點數。
也因此使我們無法得到精確表示,造成運算上的誤差。
//這個例子,你覺得以下程式片段會顯示什麼結果?
double a = 0.1;
double b = 0.1;
double c = 0.1;
if((a + b + c) == 0.3){
System.out.println("等於0.3");
}
else{
System.out.println("不等於0.3")
}
//輸出:不等於0.3
所以,如果要求精確度,那就要小心使用浮點數,而且別使用==直接比較浮點數的結果。
我的可以使用java.math.BigDecimal類別,以上面的例子為例,我們可以得到精確的結果0.3。
BigDecimal opd1 = new BigDecimal("0.1");
BigDecimal opd2 = new BigDecimal("0.1");
BigDecimal opd3 = new BigDecimal("0.1");
BigDecimal res = opd1.add(opd2).add(opd3);
System.out.println(res);
//輸出結果0.3
BigDecimal opd4 = new BigDecimal("1.0");
BigDecimal opd5 = new BigDecimal("0.2");
res = opd4.subtract(opd5);
System.out.println(res);
//輸出結果0.8
建構BigDecimal的方法之一是使用字串,BigDecimal建構時會剖析傳入字串,以預設精度進行接下來的運算,
BigDecimal提供有add()、subtract()、multiply()、divide()等方法,可以進行加、減、乘、除等運算,這些方法都會傳回代表運算結果的BigDecimal。
參考來源:Java SE 8 技術手冊 林信良著
如有敘述錯誤,還請不吝嗇留言指教,thanks!