Heim >Java >javaLernprogramm >Warum löst Javas BigDecimal eine ArithmeticException für nicht terminierende Dezimalerweiterungen aus?
Beim Durchführen einer Divisionsoperation mit der BigDecimal-Klasse von Java kann die folgende Ausnahme auftreten:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
Dieser Fehler tritt auf, wenn die Divisionsoperation einen Dezimalquotienten mit einer unendlich langen Entwicklung ergibt. Standardmäßig sind BigDecimal-Operationen exakt, d. h. sie liefern das exakte mathematische Ergebnis ohne Rundung.
Die Divide-Methode löst jedoch eine ArithmeticException aus, wenn das Ergebnis eine nicht terminierende Dezimalentwicklung aufweist und ein genaues Ergebnis erwartet wird (d. h. , wenn die Genauigkeitseinstellung des verwendeten MathContext-Objekts 0 ist).
Um dieses Problem zu beheben, können Sie eine Genauigkeitseinstellung ungleich Null für angeben MathContext-Objekt. Dadurch wird erzwungen, dass das Ergebnis auf eine bestimmte Anzahl von Dezimalstellen gerundet wird:
a.divide(b, 2, RoundingMode.HALF_UP)
In diesem Fall ist 2 die Skalierung (Anzahl der Dezimalstellen) und RoundingMode.HALF_UP ist der zu verwendende Rundungsmodus . Durch Angabe einer Genauigkeit können Sie ein endliches und darstellbares Dezimalergebnis erhalten.
Das obige ist der detaillierte Inhalt vonWarum löst Javas BigDecimal eine ArithmeticException für nicht terminierende Dezimalerweiterungen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!