値が450.90のBigDecimalがあります。次の穴の整数値に切り上げてから、次のように小数点なしで整数値を出力します。
値:450.90->四捨五入:451.00->出力:451
値:100.00001->丸め:101.00000出力:101
いくつかの解決策をチェックしましたが、期待した結果が得られません。これが私のコードです。
BigDecimal value = new BigDecimal(450.90);
value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP
return value.intValue();
ありがとう!
setScale
returns結果の新しいBigDecimal
、それは変更されませんそれを呼び出すインスタンス。したがって、戻り値をvalue
に割り当てます。
value = value.setScale(0, RoundingMode.UP);
alwaysは切り上げたいと言ったので、これをRoundingMode.UP
に変更しました。ただし、必要に応じて、代わりにRoundingMode.CEILING
を使用することもできます。 -451.2
を何にしたいかによって異なります(-452
[UP
]または-451
[CEILING
])。詳細は RoundingMode
を参照してください。
使用する:
value.setScale(0, RoundingMode.CEILING);
メソッドの説明から:
BigDecimalオブジェクトは不変なので、setScaleメソッドを呼び出しても、setX mutateフィールドXという名前のメソッドを持つという通常の規則に反して、元のオブジェクトが変更されることはありません。代わりに、setScaleは適切なスケールを持つオブジェクトを返します。返されたオブジェクトは、新しく割り当てられる場合とされない場合があります。
public void test() {
BigDecimal value = new BigDecimal(450.90);
System.out.println(value.setScale(0, RoundingMode.HALF_UP)); // prints 451
}
戻り値を使用する必要があります
BigDecimal value = new BigDecimal(450.90);
value = value.setScale(0, RoundingMode.HALF_UP); //Also tried with RoundingMode.UP
BigDecimal は不変であることに注意してください
スケーリング/丸め操作(setScaleおよびround)は、値がオペランドの値とほぼ(または正確に)等しいが、スケールまたは精度が指定された値であるBigDecimalを返します。つまり、値への影響を最小限に抑えて、格納された数値の精度を増減します。
Math.ceil()
関数を使用します。メソッドceilは、引数以上の最小の整数を提供します。
あなたはそれについて読むことができます ここ