我正在从0.495的double值创建一个BigDecimal,并使用HALF_UP
舍入模式将其打印为两位小数。这是代码:
BigDecimal d = new BigDecimal(0.495);
d = d.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(d.toPlainString());
我期待结果看到0.50,但我看到了0.49。如果丢弃的分数为ROUND_HALF_UP
>= .5.
应该向上舍入
那为什么我会看到这种行为?
答案 0 :(得分:3)
写作时
new BigDecimal(0.495)
您正在将double
值传递给BigDecimal
构造函数。双值是近似值。在这种情况下,您的BigDecimal
实例的值在0.495
之下,距离实例化的位置。{/ p>
如果传递字符串而不是double,BigDecimal
将表示字符串指示的确切值。
所以使用
BigDecimal d = new BigDecimal("0.495");