BigDecimal四捨五入的問題

創建BigDecimal對象主要有兩種。
BigDecimal b1 = new BigDecimal("1.34");//1.34
BigDecimal b2 = BigDecimal.valueOf(1.34);//1.34

其中b1也可以寫成new BigDecimal(Double.toString(1.34)),可以直接new BigDecimal(1.34)嗎,也是可以的,只是會出現精度問題。
BigDecimal one1 = new BigDecimal(1.34);//1.3400000000000000799360577730112709105014801025390625
BigDecimal two1 = new BigDecimal("1.34");//1.34

所以四捨五入的時候一定不要直接用double去四捨五入,不然有可能會因爲精度的問題出現誤差
比如:

System.out.println(new BigDecimal((double)0.85).setScale(1, BigDecimal.ROUND_HALF_UP));//結果是0.8

因爲new BigDecimal((double)0.85) 的結果是0.84999999999999997779553950749686919152736663818359375 而不是0.85
所以要用String去四捨五入

System.out.println(new BigDecimal(Double.toString(0.85)).setScale(1, BigDecimal.ROUND_HALF_UP));//結果是0.9

也可以用String.format()方法來四捨五入

System.out.println(String.format("%.1f", (double)0.85));//0.9

小數之間的運算,因爲也牽扯到精度問題,所以最好都轉成BigDecimal之後去計算

public BigDecimal add(BigDecimal value);//加法
public BigDecimal subtract(BigDecimal value);//減法 
public BigDecimal multiply(BigDecimal value);//乘法
public BigDecimal divide(BigDecimal value);//除法

比如加法:

 BigDecimal b1 = new BigDecimal(Double.toString(value1));
 BigDecimal b2 = new BigDecimal(Double.toString(value2));
 System.out.println(b1.add(b2) + "");//b1 + b2

 

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