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:
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;
Dies gibt Folgendes aus:
Code: Select all
bool(false)
Last chars gets stripped:
3467.6000976562
3467.60009765625
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>