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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist nicht die Art, wie die Rundung funktioniert. HALF_UP bedeutet, dass, wenn eine Zahl genau in der Mitte zwischen den 2 nächsten verfügbaren Werte (je nach Umfang), es wird aufgerundet. Alles andere ist gerundet auf den nächsten Wert.
Auszug aus in der javadoc:
Man die Verhaltensweisen, die Sie benötigen, Sie konnte Runde nacheinander, obwohl ich nicht sicher bin warum Sie wollen, ein solches Verhalten:
Dieses Ergebnis ist genau das, was Sie sollte bekommen; Rundung jeder intermediate Opfer, die Präzision, so dass es schließt direkt an die richtige Anzahl von Ziffern.
Wenn Sie wirklich wollen, die anderen Verhalten haben, müssen Sie etwas tun, wie