2013-03-26 12 views
152

BigDecimalの値を小数点以下2桁まで丸めようとしています。BigDecimalを*常に小数点以下2桁に丸めます

私は

BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING)); 
logger.trace("rounded {} to {}", value, rounded); 

を使用していますが、それは私が一貫してやりたいしません:

rounded 0.819 to 0.82 
rounded 1.092 to 1.1 
rounded 1.365 to 1.4 // should be 1.37 
rounded 2.730 to 2.8 // should be 2.74 
rounded 0.819 to 0.82 

私は、私はちょうど2つの小数点以下の桁をしたい、有効桁数を気にしないでください。 BigDecimalでこれをどうやって行うのですか?または、これに適した別のクラス/ライブラリがありますか?

+7

実際に丸めたい場合は、RoundingMode.HALF_UPを使用します。 –

答えて

286
value = value.setScale(2, RoundingMode.CEILING) 
+15

これは実際に私が望むように動作します。違いは単純に 'round()'は有効桁数で動作し、 'setScale'は固定小数点数で動作するか、それとももっと多いのですか? –

+12

これは正確です。 –

+18

"typcal rounding"を実行するには、RoundingMode.HALF_UPを使用します。つまり、1.111は1.11を返します[CEILINGは1.12を返します] –