什么会打印到控制台?为什么?
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")));
答案 0 :(得分:5)
我机器上的结果是:
7.739999999999999
7.740000
这一点都不让我感到惊讶。在第二种情况下,我们完全处理BigDecimal,并且总是成倍增加 - 没有理由出错。
在第一种情况下,您将BigDecimal转换为double,因此您的代码有效
double d = 0.0774;
System.out.println(d * 100.0);
值0.0774无法准确表示为double
,因此存在差异。
这与BigDecimal
无关,而与double
无关。您应该从不在BigDecimal
和double
之间进行转换 - 适合在BigDecimal
中使用的值几乎总是不合适< / em>表示double
值。