Heim > Java > javaLernprogramm > Warum erzeugt Javas Double eine ungenaue Rundung und wie kann BigDecimal das Problem lösen?

Warum erzeugt Javas Double eine ungenaue Rundung und wie kann BigDecimal das Problem lösen?

Patricia Arquette
Freigeben: 2024-12-16 21:25:12
Original
632 Leute haben es durchsucht

Why Does Java's Double Produce Inaccurate Rounding, and How Can BigDecimal Solve It?

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;
Nach dem Login kopieren

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);
Nach dem Login kopieren

Mit BigDecimal spiegelt das Ergebnis genau den erwarteten Wert wider:

877.85 = 1586.6 - 708.75
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage