6

を使用する次のコードはRoundingMode.HALF_EVEN

BigDecimal value1 = new BigDecimal("4.5");
value1=value1.setScale(0, RoundingMode.HALF_EVEN);

BigDecimal value2 = new BigDecimal("6.5");
value2=value2.setScale(0, RoundingMode.HALF_EVEN);

System.out.println(value1+"\n"+value2);

4とがそれぞれ表示されます6。破棄された小数部 (この場合は 5) の左側の数字が奇数5であるため、それぞれ表示する必要があるように思えます。この場合、それは実行します7RoundingMode.HALF_UP

の場合RoundingMode.HALF_UPRoundingMode.UP破棄された小数部分が >=0.5 (これは true) の場合に実行され、それ以外の場合RoundingMode.DOWNは実行されます。

4

1 に答える 1

15

動作はJavadocで詳しく説明されています。

両方の隣人が等距離でない限り、「最も近い隣人」に向かって丸める丸めモード。

4.5 という数値が与えられた場合、これは 4 と 5 の間の数値の範囲のちょうど中間に位置し、次のように呼び出します。

BigDecimal value1 = new BigDecimal("4.5").setScale(RoundingMode.ROUND_HALF_EVEN);

ランタイムは、どのネイバーを丸めるかを判断する必要があります。別名、4 に丸めるか、5 に丸める必要がありますか? 通常は、4.5 がどちらの値に近いかに基づいて丸められますが、この場合は両方の隣に近い値になります。ただし、最終結果を任意に選択する代わりに、偶数を選択します。これが の動作ですROUND_HALF_EVEN。必要に応じて指定できROUND_HALF_UP、最終結果は 4 ではなく 5 になります。また、丸め方の決定は、最終結果がどうなるかに基づいていることに注意してください (あなたが想定しているように、大きな小数)。

于 2013-03-12T02:28:12.573 に答える