Dies ist keine Frage, da es eher bewusst ist. Ich habe eine Anwendung aktualisiert, die json_encode()
PHP7.1.1 verwendet , und es wurde ein Problem festgestellt, bei dem Floats so geändert wurden, dass sie manchmal 17 Stellen umfassen. Laut Dokumentation wurde PHP 7.1.x serialize_precision
beim Codieren von Doppelwerten anstelle der Genauigkeit verwendet. Ich vermute, dies hat einen Beispielwert von verursacht
472,185
werden
472.18500000000006
nachdem dieser Wert durchgegangen ist json_encode()
. Seit meiner Entdeckung bin ich zu PHP 7.0.16 zurückgekehrt und habe kein Problem mehr mit json_encode()
. Ich habe auch versucht, auf PHP 7.1.2 zu aktualisieren, bevor ich wieder auf PHP 7.0.16 zurückkam.
Die Gründe für diese Frage stammen aus PHP - Floating Number Precision . Der Grund dafür liegt jedoch in der Änderung von Precision zu serialize_precision in json_encode()
.
Wenn jemand eine Lösung für dieses Problem kennt, würde ich gerne die Argumentation / Lösung anhören.
Auszug aus einem mehrdimensionalen Array (vorher):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
und nach dem Durchgehen json_encode()
...
"staticYaxisInfo":
{
"17":
{
"variable_id": "17",
"static": "1",
"min": 0,
"max": 472.18500000000006,
"locked_static": "1"
}
},
ini_set('serialize_precision', 14); ini_set('precision', 14);
würde es wahrscheinlich wie früher serialisieren lassen, aber wenn Sie sich wirklich auf eine bestimmte Präzision Ihrer Schwimmer verlassen, machen Sie etwas falsch.