So überwinden Sie Java-Rundungsdoppelanomalien
In Java können Gleitkommaberechnungen manchmal zu unerwarteten Rundungsproblemen führen. Schauen wir uns zur Veranschaulichung den folgenden Code an:
double tempCommission = targetPremium.doubleValue() * rate.doubleValue() / 100d; double netToCompany = targetPremium.doubleValue() - tempCommission; double dCommission = request.getPremium().doubleValue() - netToCompany;
Der erwartete Wert für dCommission ist 877,85, aber das tatsächliche Ergebnis ist mit 877,8499999999999 etwas ungenau. Um dieses Problem zu lösen, müssen wir genauere Berechnungen durchführen.
Die Lösung liegt in der Verwendung von java.math.BigDecimal. Diese Klasse bietet Kontrolle über die Genauigkeit der Gleitkomma-Arithmetik. Hier ist eine aktualisierte Version des Codes mit BigDecimal:
import java.math.BigDecimal; BigDecimal premium = BigDecimal.valueOf("1586.6"); BigDecimal netToCompany = BigDecimal.valueOf("708.75"); BigDecimal commission = premium.subtract(netToCompany); System.out.println(commission + " = " + premium + " - " + netToCompany);
Mit BigDecimal spiegelt das Ergebnis genau den erwarteten Wert wider:
877.85 = 1586.6 - 708.75
Das obige ist der detaillierte Inhalt vonWarum erzeugt Javas Double eine ungenaue Rundung und wie kann BigDecimal das Problem lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!