1
我已经看过this asnwer。BigDecimal.valueOf(float)如何工作?
我对BigDecimal.valueOf(float)
的行为有些困惑。这里的例子:
System.out.println(BigDecimal.valueOf(20.2f)); //prints 20.200000762939453
因此
float f = BigDecimal.valueOf(20.2f)
.setScale(2, RoundingMode.UP)
.floatValue();
System.out.println(f); //prints 20.21
哪个defenitely不是我所期望的行为。是否有一种方法可以正确地避免这种错误?
看看(http://stackoverflow.com/questions/588004/is-floating-point-math- [是浮点运算坏了吗?]破碎)。有限精度浮点数固有地不能表示某些值。它与基数10中的1/3无法完全相同。这里'20.2f!= 20.2'。 – Zong
@宗正立很有意思。所以我们处理浮点算术,并且希望保持精确的精度,我们是否应该在我们对它们执行算术运算时执行ROUND_EVEN? – stella
预期产量是多少?它看起来是正确的,20.200000762939453四舍五入到小数点后两位是20.21。您可以尝试将比例设置为更大的数字,然后将其设置为2 – samgak