Когда BigDecimal
используется при вводе double
и BigDecimal
со входом String
, похоже, что появляются разные результаты.новый BigDecimal (double) vs new 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);
х выходов как
0.222222221777777790569747304508155316795087227497352441864147715340493949298661391367204487323760986328125
в то время как у является
0.222222221777777778
Я прав, говоря, что это из-за двойной неточностей? Но так как это BigDecimal
, разве это не должно быть одинаково?
имеют вид на а, б и в, г ... это уже другая;) посмотрим на http://stackoverflow.com/questions/12395281/convert- double-to-bigdecimal-and-set-bigdecimal-precision – pL4Gu33
Это потому, что 'double' имеет ограниченную точность; Это IEEE 754 для вас. – fge
вы можете исправить его, используя '.setScale (10, BigDecimal.ROUND_HALF_UP);' – SnakeDoc