Heim  >  Artikel  >  Java  >  Wie vermeide ich „ArithmeticException: Nicht terminierende Dezimalerweiterung' in der BigDecimal-Division?

Wie vermeide ich „ArithmeticException: Nicht terminierende Dezimalerweiterung' in der BigDecimal-Division?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-12 10:50:02679Durchsuche

How to Avoid

Vermeiden nicht terminierender Dezimalerweiterungen in der BigDecimal-Division

Die BigDecimal-Klasse von Java ist darauf ausgelegt, hochpräzise mathematische Operationen zu ermöglichen, kann dies jedoch manchmal löst den Fehler „ArithmeticException: Nicht terminierende Dezimalerweiterung; kein exakt darstellbares Dezimalergebnis“ aus. Diese Ausnahme tritt auf, wenn zwei BigDecimal-Objekte dividiert werden und der Quotient eine unendliche Dezimalentwicklung hat.

Grund für die Ausnahme

Laut BigDecimal-Dokumentation, wenn kein MathContext-Objekt ( (Angabe von Genauigkeit und Rundungsmodus) vorgesehen ist, werden arithmetische Operationen exakt ausgeführt. Wenn der Quotient eine nicht endende Dezimalentwicklung hat und nicht genau dargestellt werden kann, wird die Ausnahme ausgelöst.

Beispiel

BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b) // raises the ArithmeticException

Fix

Um das Problem zu beheben, können Sie ein MathContext-Objekt mit einer Genauigkeit ungleich Null und einem Rundungsmodus angeben. Zum Beispiel:

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

Hier gibt 2 die Skalierung (Anzahl der Dezimalstellen) an und RoundingMode.HALF_UP bezeichnet die Rundungsmethode.

Zusätzliche Informationen

  • Mit ArithmeticContext-Objekten können Sie die Rundung und Genauigkeit von Berechnungen steuern.
  • Wenn kein genaues Ergebnis erzielt werden kann, verwendet die Operation den angegebenen Rundungsmodus, um das Ergebnis anzunähern.
  • Weitere Informationen finden Sie in der Java-Dokumentation oder in diesem Blogbeitrag: https://blog.frankel.ch/2013/09/avoid-arithmetic-Exception-in-java-bigdecimals.html

Das obige ist der detaillierte Inhalt vonWie vermeide ich „ArithmeticException: Nicht terminierende Dezimalerweiterung' in der BigDecimal-Division?. 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