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
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!