Heim  >  Artikel  >  Java  >  Warum scheint die Umwandlung eines Floats in einen Double manchmal an Präzision zu verlieren?

Warum scheint die Umwandlung eines Floats in einen Double manchmal an Präzision zu verlieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 16:53:30911Durchsuche

Why Does Converting a Float to a Double Sometimes Appear to Lose Precision?

Beibehaltung der Präzision beim Konvertieren von Float in Double

Problem

Das Umwandeln eines Float-Grundelements in ein Double-Grundelement kann zu offensichtlichen Präzisionsverlusten führen. Dieses Phänomen wird oft auf die „zusätzliche“ Präzision des Doubles zurückgeführt, liegt aber tatsächlich an der begrenzten Fähigkeit des Floats, bestimmte Zahlen genau darzustellen.

Im folgenden Beispiel führt die Umwandlung eines Floats in ein Double zur Einführung von Ziffern:

float temp = 14009.35F;
System.out.println(Float.toString(temp)); // 14009.35
System.out.println(Double.toString((double)temp)); // 14009.349609375

Parsing-Lösung

Eine Problemumgehung besteht darin, den Float in einen String umzuwandeln und den String dann als Double zu analysieren, wodurch der ursprüngliche Wert erhalten bleibt:

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // 14009.35

Präzisionsüberlegungen

Es ist wichtig zu beachten, dass die „zusätzlichen“ Ziffern nicht tatsächlich durch das doppelte Grundelement hinzugefügt werden. Der Float gab die Zahl einfach nicht genau wieder. Das Double stellt den ursprünglichen Float-Wert originalgetreu dar.

Die Konvertierung in einen String und zurück führt zu einem Double-Wert, der näher an der String-Darstellung liegt, aber es ist wichtig zu überprüfen, ob dies tatsächlich wünschenswert ist.

BigDecimal-Alternative

In Situationen, in denen genaue Dezimalwerte erforderlich sind (z. B. Geldberechnungen), sollten Sie die Verwendung des BigDecimal-Typs anstelle von Float oder Double in Betracht ziehen, da dies eine genauere Darstellung von Dezimalzahlen gewährleistet.

Das obige ist der detaillierte Inhalt vonWarum scheint die Umwandlung eines Floats in einen Double manchmal an Präzision zu verlieren?. 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