Pingの:
最寄りhundered-千桁に数の小数点以下の桁数を切り上げしようとしたときに、私はこの問題に直面しています。
例:
BigDecimal num1 = BigDecimal.valueOf(0.38871551);
MathContext mc = new MathContext(5);
System.out.println(num1.round(mc));
出力がある0.38872
として期待されています。すべての良い今のところ。のは、別の例を見てみましょう:
BigDecimal num1 = BigDecimal.valueOf(1.1680418);
MathContext mc = new MathContext(5);
System.out.println(num1.round(mc));
出力されます1.1680
。これはどこに問題がarrisesです。私が欲しいのはなるように出力されます1.16804
が、丸めが食べるように見える4
ことがあるとしてそれを残すのではなくを。
私は別の丸めモードを試してみましたが、これは私が得るものです:
RoundMode.UP
提供します1.1681
RoundingMode.HALF_UP
またはRoundingMode.HALF_DOWN
与える1.1680
ようにと...
私は、所望の出力を得るにはどうすればよいです:
0.38871551
に丸める必要があります0.38872
1.1680418
に丸める必要があります1.16804
0.55052984
に丸める必要があります0.55053
私も6位小数位の代わりに、第五に丸めてみましたが、私は上記のように私に所望の出力を与える適切な組み合わせを見つけることができませんよ。
グッド:
あなたはBigDecimalのsetScale関数でそれを試すことができます
num1 = num1.setScale(5, BigDecimal.ROUND_HALF_UP);