Rundung BigDecimal mit setScale () - Methode: unerwartetes Ergebnis

Um eine Nummer, die ich den folgenden code verwenden:

public static roundBd(BigDecimal bd){
  BigDecimal result1 = bd.setScale(0, RoundingMode.HALF_UP);
  return result1;
}
  • Eingang 1.50 --> Ausgang 2
  • Eingang 1.499 --> Ausgang 1

Das erste Ergebnis ist für mich ok, aber die zweite ist nicht das, was ich erwartet hatte.
Auch für 1.499, ich würde gerne in der Ausgabe 2. (In den details: zunächst möchte ich eine Runde 1.499 auf 1,50, dann auf 1,5 und schließlich auf 2)

Aber....

BigDecimal bd = new BigDecimal("1.499");  //I'd like to round it to 2
BigDecimal result1 = bd.setScale(2, RoundingMode.HALF_UP); //result1 == 1.50
BigDecimal result2 = bd.setScale(1, RoundingMode.HALF_UP); //result2 == 1.5
BigDecimal result3 = bd.setScale(0, RoundingMode.HALF_UP); //result3 == 1
  • Von dieser Rundung Stil 1.4444444445 würde Runde bis zu 2. Das ist nicht das, was wir wollen.
Schreibe einen Kommentar