Wie kann man einen Float in einen String umwandeln und dabei alle Ziffern behalten?
Posted: 13 Jan 2025, 15:56
Ich weiß, dass die Typkonvertierung aufgrund der Art und Weise, wie Gleitkommazahlen im Binärformat gespeichert werden, zu kleinen Fehlern führen kann. Ich habe zwar den Anwendungsfall, einen Float in einen String umzuwandeln, aber jetzt habe ich das Problem, dass dadurch möglicherweise ein Zeichen entfernt wird:
Dies gibt Folgendes aus:
Wie kann ich den Float in einen String umwandeln, ohne dabei eine Ziffer zu verlieren?
https://onlinephp.io/c/b3af3
Hinweis:
[*] behebt nicht, dass bestimmte Float-Werte ungenau gespeichert werden
[*] funktioniert möglicherweise für einige Zahlen genau wie in meinem Beispiel, ändert jedoch auch nichts an der Tatsache, dass andere Zahlen zu ungenau sind oder dass einige Gleitkommazahlen mit anderen anders aussehenden Gleitkommazahlen identisch sind. (Ähnlich wie im Dezimalformat .99999... identisch mit 1 ist, auch wenn es anders aussieht, sind die Gleitkommazahlen 3467.6000976563 und 3467.60009765625318323146 für PHP identisch.)
< /ul>
Code: Select all
$we_all_float_down_here = (float) 3467.60009765625;
$expected_string = '3467.60009765625';
var_dump($expected_string === (string) $we_all_float_down_here);
echo "Last chars gets stripped:\n"
. (string) $we_all_float_down_here . "\n"
. $expected_string;
Code: Select all
bool(false)
Last chars gets stripped:
3467.6000976562
3467.60009765625
https://onlinephp.io/c/b3af3
Hinweis:
[*]
Code: Select all
ini_set('precision', 100);
[*]
Code: Select all
number_format
< /ul>