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
如果又使用無條件捨去或無條件進位計算時會有很明顯的誤差。
參考:
沒有留言:
張貼留言