AdSense

網頁

2019/5/12

Java 浮點數double轉換BigDecimal問題

Java 如果要將double浮點數轉成BigDecimal計算時,應使用BigDecimal.value(double val)來轉,否則精確度會有誤差,例如下面範例。

double d1 = 0.09;
BigDecimal b1 = new BigDecimal(d1);
System.out.println(b1); // 0.0899999999999999966693309261245303787291049957275390625
System.out.println(b1.setScale(2, BigDecimal.ROUND_DOWN)); // 0.08

BigDecimal b2 = BigDecimal.valueOf(d1); 
System.out.println(b2); // 0.09
System.out.println(b2.setScale(2, BigDecimal.ROUND_DOWN)); // 0.09

如果又使用無條件捨去或無條件進位計算時會有很明顯的誤差。


參考:

沒有留言:

AdSense