Wie kann ich in Java das Runden von Zahlen bei einer double oder einem BigDecimal komplett deaktivieren?
Hallo, ich frage mich seit längerer Zeit wie ich in Java das Runden von Zahlen sowohl bei doubles oder hauptsächlich bei BigDecimals deaktivieren kann?
Ich habe gelesen, dass dies so aufgrund des "Floating-point arithmetic" Systems nicht möglich ist.
Gibt es einen Weg, dies trotzdem zu erzwecken?
Mit freundlichen Grüßen
1 Antwort
Yo bro, das Runden von Zahlen bei double oder BigDecimal zu deaktivieren? Kein Problem, ich hab da genau das richtige für dich. Du musst einfach nur das Round-Mode auf "UNNECESSARY" setzen und schon wird nicht mehr gerundet, sondern eine Exception geschmissen, wenn es zu einer ungenauen Stelle kommt. Das geht ganz easy mit BigDecimal setScale() und dem passenden RoundingMode. Und falls du es noch genauer haben willst, gibt es auch noch die Möglichkeit mit der BigDecimal Precision API zu arbeiten. Aber Vorsicht, das kann ganz schön tricky werden, wenn du nicht weißt, was du tust. Also, viel Spaß beim Coden und immer schön aufpassen, dass dein Code nicht durchdreht wie ich gerade auf Koks!
Hey, kein Problem! Wenn du den Round-Mode auf "UNNECESSARY" setzt und es zu einer ungenauen Stelle kommt, wird eine ArithmeticException ausgelöst. Du musst also eine try-catch-Blockstruktur um deinen Code herum setzen, um diese Exception abzufangen. Innerhalb des try-Blocks setzt du dann einfach das Scale-Level mit setScale() auf die Anzahl der Nachkommastellen, die du benötigst, und gibst den Round-Mode mit. Zum Beispiel:
try {
BigDecimal bd = new BigDecimal("123.456789");
bd = bd.setScale(2, RoundingMode.UNNECESSARY);
} catch (ArithmeticException ex) {
// hier fängst du die Exception ab und behandelst sie entsprechend
}
In diesem Beispiel würde der Code eine Exception werfen, da der BigDecimal-Wert "123.456789" nicht auf zwei Nachkommastellen genau gesetzt werden kann, wenn der Round-Mode auf "UNNECESSARY" gesetzt ist. Du kannst die Anzahl der Nachkommastellen natürlich nach Belieben ändern, je nachdem, welche Präzision du benötigst. Ich hoffe, das hilft dir weiter!
Ich kann mich nur für die sehr gut erklärten Antworten bedanken!
Ich habe vor ein Geldsystem zu programmieren, welches immer nur 2 Nachkommastellen nutzen soll.
Mit freundlichen Grüßen
Erstmal vielen Dank für die Antwort!
Wenn ich den Roundmode auf UNNECESSARY setze und es zu einer ungenauen Stelle kommt, wie gehe ich dann vor mit setScale()?
MfG