BigDecimal
が期待値の代わりに半分を四捨五入した後にこの値を返すのはなぜですか?BigDecimalは、この値を半分に丸めた後に戻すのはなぜですか?
// EXPECTED 0.45
// RETURNS 0.45
System.out.println(BigDecimal.valueOf(Double.parseDouble("0.45"))
.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
// EXPECTED 0.45
// RETURNS 0.45
System.out.println(BigDecimal.valueOf(Double.parseDouble("0.445"))
.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
// EXPECTED 0.45
// RETURNS 0.44
System.out.println(BigDecimal.valueOf(Double.parseDouble("0.4445"))
.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
ラウンド(0.4445)= 0.44は問題ありません。なぜ0.4445が0.45になるのですか? – NikNik
0.44は0.4545に近い0.4445になります。 – luk2302
丸め演算は、最初の破棄された端数で行われますが、すべての破棄された端数で再帰的に行われるわけではありません。あなたは丸めが0.4445-> 0.445-> 0.45になると予想したと思います。しかし、他の人が既に指摘しているように、これは実際にあなたに恐ろしい結果を与えるでしょう。 –