当BigDecimal用的输入用double和BigDecimal与输入String不同的结果似乎出现。
BigDecimal
double
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,不应该一样吗?
我说这是因为双重不精确吗?
您绝对正确,这完全是由于double的不精确。
但是由于这是一个BigDecimal,不应该一样吗?
不,不应该。在创建时就引入了错误new BigDecimal(0.333333333),因为0.333333333常量已经嵌入了错误。到那时,您无法采取任何措施来修复此表示错误:当时那匹众所周知的马已经离开了谷仓,所以现在关门已经太迟了。
new BigDecimal(0.333333333)
0.333333333
String另一方面,当您传递一个时,十进制表示形式与该字符串完全匹配,因此您将获得不同的结果。