使用BigDecimal进行奇怪的舍入行为?

时间:2011-09-21 06:24:23

标签: java rounding bigdecimal

什么会打印到控制台?为什么?

1

BigDecimal BigDecimalNum = new BigDecimal("0.0774");
System.out.println(BigDecimalNum.doubleValue() * 100.00);

2

BigDecimal BigDecimalNum2 = new BigDecimal("0.0774");   
System.out.println(BigDecimalNum2.multiply(new BigDecimal("100.00")));

1 个答案:

答案 0 :(得分:5)

我机器上的结果是:

7.739999999999999
7.740000

这一点都不让我感到惊讶。在第二种情况下,我们完全处理BigDecimal,并且总是成倍增加 - 没有理由出错。

在第一种情况下,您将BigDecimal转换为double,因此您的代码有效

double d = 0.0774;
System.out.println(d * 100.0);

值0.0774无法准确表示为double,因此存在差异。

这与BigDecimal无关,而与double无关。您应该从不BigDecimaldouble之间进行转换 - 适合在BigDecimal中使用的值几乎总是不合适< / em>表示double值。