I.ペトロフ:
私は、最も近い整数にラウンドBigDecimal値にしたいです。
私はこの問題から使用済みのソリューションしようとした最も近い整数値に丸めます。JavaのBigDecimalが、それは私のために動作しません。
BigDecimal scaled = value.setScale(0, RoundingMode.HALF_UP);
System.out.println(value + " -> " + scaled);
このような場合には、右に動作します。
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
しかし、それは場合には失敗しました
100.47 -> 100 instead of 101.
このコードは動作しないのはなぜ?
user7294900:
あなたは、あなたのケースでの使用には、常に数を切り上げることを期待RoundingMode .UP
HALF_UPからのみ丸めます.5
アップ
両隣が等距離である場合を除き、その場合、ラウンドアップには、「最近傍」へのラウンドへの丸めモード。
これらの丸め演算の結果を示す表:
Input Number UP DOWN CEILING FLOOR HALF_UP HALF_DOWN HALF_EVEN UNNECESSARY 5.5 6 5 6 5 6 5 6 throw ArithmeticException 2.5 3 2 3 2 3 2 2 throw ArithmeticException 1.6 2 1 2 1 2 2 2 throw ArithmeticException 1.1 2 1 2 1 1 1 1 throw ArithmeticException