小编典典

new BigDecimal(double)与new BigDecimal(String)

java

BigDecimal用的输入用doubleBigDecimal与输入String不同的结果似乎出现。

BigDecimal a = new BigDecimal(0.333333333);
BigDecimal b = new BigDecimal(0.666666666);

BigDecimal c = new BigDecimal("0.333333333");
BigDecimal d = new BigDecimal("0.666666666");

BigDecimal x = a.multiply(b);
BigDecimal y = c.multiply(d);

System.out.println(x);
System.out.println(y);

x输出为

0.222222221777777790569747304508155316795087227497352441864147715340493949298661391367204487323760986328125

当y是

0.222222221777777778

我说这是因为双重不准确性吗?但是由于这是一个BigDecimal,不应该一样吗?


阅读 413

收藏
2020-09-28

共1个答案

小编典典

我说这是因为双重不精确吗?

您绝对正确,这完全是由于double的不精确。

但是由于这是一个BigDecimal,不应该一样吗?

不,不应该。在创建时就引入了错误new BigDecimal(0.333333333),因为0.333333333常量已经嵌入了错误。到那时,您无法采取任何措施来修复此表示错误:当时那匹众所周知的马已经离开了谷仓,所以现在关门已经太迟了。

String另一方面,当您传递一个时,十进制表示形式与该字符串完全匹配,因此您将获得不同的结果。

2020-09-28