当使用double
类型的输入和String
类型的输入时,使用BigDecimal
会出现不同的结果。
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
的精度有限;这就是IEEE 754。 - fge.setScale(10, BigDecimal.ROUND_HALF_UP);
进行修正。 - SnakeDoc