Heim >Java >javaLernprogramm >Warum löst Javas BigDecimal eine ArithmeticException für nicht terminierende Dezimalerweiterungen aus?

Warum löst Javas BigDecimal eine ArithmeticException für nicht terminierende Dezimalerweiterungen aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-15 10:11:02882Durchsuche

Why Does Java's BigDecimal Throw an ArithmeticException for Non-Terminating Decimal Expansions?

ArithmeticException Due to Non-Terminating Decimal Expansion

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn