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