Nicht-terminierende Dezimalerweiterungsausnahme bei der Division von BigDecimals
Beim Teilen von zwei BigDecimal-Objekten ohne Angabe eines MathContext kann die Operation zu einem führen Ausnahme „ArithmeticException: Nicht terminierende Dezimalentwicklung; kein exakt darstellbares Dezimalergebnis“.
Dies liegt daran, dass der Quotient bestimmter Divisionen (z. B. 1 dividiert durch 3) eine unendlich lange Dezimalentwicklung aufweist. Wenn die Genauigkeit auf 0 (Standard) eingestellt ist, muss das genaue Ergebnis berechnet werden. Wenn der Quotient eine nicht terminierende Erweiterung hat, wird eine Ausnahme ausgelöst.
Lösung
Um dies zu beheben, muss ein MathContext mit einem bestimmten Maßstab und Rundungsmodus bereitgestellt werden . Der folgende Code demonstriert dies:
a.divide(b, 2, RoundingMode.HALF_UP)
In diesem Beispiel ist die Skalierung auf 2 und der Rundungsmodus auf RoundingMode.HALF_UP eingestellt. Dadurch wird sichergestellt, dass das Divisionsergebnis auf eine bestimmte Skala gerundet wird und die Ausnahme vermieden wird.
Ausführlichere Informationen finden Sie in der Java 11 BigDecimal-Dokumentation oder in externen Ressourcen wie diesem Blogbeitrag.
Das obige ist der detaillierte Inhalt vonWarum führt die Division von BigDecimals ohne MathContext zu einer Ausnahme „Nicht terminierende Dezimalerweiterung'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!