Heim  >  Artikel  >  Java  >  Warum löst die Division „BigDecimal“ eine „ArithmeticException“ für nicht abschließende Dezimalzahlen aus?

Warum löst die Division „BigDecimal“ eine „ArithmeticException“ für nicht abschließende Dezimalzahlen aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-12 14:02:01904Durchsuche

Why Does `BigDecimal` Division Throw an `ArithmeticException` for Non-Terminating Decimals?

Eintauchen in die Tiefen der ArithmeticException: Non-Terminating Division

Der Codeausschnitt lieferte Versuche, zwei BigDecimal-Objekte (a und b) zu dividieren ). Diese Operation führt jedoch zu der folgenden Ausnahme:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

Um diese Ausnahme zu entschlüsseln, müssen wir uns mit den komplizierten Details der BigDecimal-Arithmetik befassen.

Das Wesen der exakten Arithmetik

Wie in der Java 11 BigDecimal-Dokumentation angegeben, wenn der MathContext Wenn die Genauigkeit des Objekts auf 0 gesetzt ist (z. B. MathContext.UNLIMITED), liefern arithmetische Operationen (einschließlich der Division ohne MathContext) genaue Ergebnisse. Dies war das einzige Verhalten in Versionen vor 5.

Unendliche Dezimalerweiterungen und Genauigkeit

Als Konsequenz der Berechnung exakter Ergebnisse ist die Rundungsmoduseinstellung eines MathContext-Objekts mit Genauigkeit 0 wird irrelevant. Für die Divisionsoperation könnte der Quotient eine unendliche Dezimalentwicklung haben, z. B. 1 dividiert durch 3.

Umgang mit nicht terminierenden Erweiterungen

Wenn der Quotient eine Nicht-Dezimalzahl hat -Beenden Sie die Dezimalerweiterung und die Operation muss ein genaues Ergebnis zurückgeben, wird eine ArithmeticException ausgelöst. Umgekehrt wird der genaue Quotient zurückgegeben, wenn das Ergebnis endlich ist.

Lösung für nicht terminierende Divisionen

Um dieses Problem zu beheben, können Sie eine Methode wie diese verwenden:

a.divide(b, 2, RoundingMode.HALF_UP)

Hier stellt 2 den Maßstab dar und RoundingMode.HALF_UP gibt die Rundung an Methode.

Zusätzliche Ressourcen

Weitere Informationen finden Sie in der Java 11 BigDecimal-Dokumentation und in diesem aufschlussreichen Blogbeitrag.

Das obige ist der detaillierte Inhalt vonWarum löst die Division „BigDecimal“ eine „ArithmeticException“ für nicht abschließende Dezimalzahlen 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