【发布时间】:2015-04-14 16:19:04
【问题描述】:
当BigDecimal 与double 的输入一起使用和BigDecimal 与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,不应该是一样的吗?
【问题讨论】:
-
看看 a,b 和 c,d ...这已经不一样了 ;) 看看 stackoverflow.com/questions/12395281/…
-
这是因为
double的精度有限;那是适合你的 IEEE 754。 -
您可以使用
.setScale(10, BigDecimal.ROUND_HALF_UP);进行更正
标签: java bigdecimal double-precision