2013-03-26 20 views
152

Ich versuche BigDecimal-Werte auf zwei Dezimalstellen aufzurunden.Rundung von BigDecimal auf * immer * habe zwei Dezimalstellen

Ich verwende

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

aber es tut nicht, was ich konsequent wollen:

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 

Ich kümmere mich nicht um signifikante Stellen, ich möchte nur zwei Dezimalstellen. Wie mache ich das mit BigDecimal? Oder ist eine andere Klasse/Bibliothek besser dafür geeignet?

+7

Wenn Sie tatsächlich runden möchten, würden Sie RoundingMode.HALF_UP verwenden –

Antwort

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

Das funktioniert tatsächlich, wie ich will. Ist der Unterschied einfach, dass 'round()' mit signifikanten Ziffern arbeitet, während 'setScale' mit einer festen Anzahl von Dezimalstellen arbeitet oder gibt es da noch mehr? –

+12

Das ist genau richtig. –

+18

Verwenden Sie RoundingMode.HALF_UP, um "typical rounding" auszuführen. Das ist 1.111 ergibt 1.11 [CEILING gibt 1.12] –

Verwandte Themen