使用java.math.BigDecimal

[注意]這邊主要只是資料整理,非本人文筆。

介紹:

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!