To nie jest pytanie, ponieważ należy bardziej uważać. Zaktualizowałem aplikację, która używa json_encode()
PHP7.1.1 i zauważyłem problem ze zmienianiem liczb zmiennoprzecinkowych, aby czasami wydłużały 17 cyfr. Zgodnie z dokumentacją, PHP 7.1.x zaczęło używać serialize_precision
zamiast precyzji przy kodowaniu podwójnych wartości. Domyślam się, że spowodowało to przykładową wartość
472,185
zostać
472.18500000000006
po przejściu tej wartości json_encode()
. Od czasu mojego odkrycia wróciłem do PHP 7.0.16 i nie mam już problemu z json_encode()
. Próbowałem też zaktualizować do PHP 7.1.2 przed powrotem do PHP 7.0.16.
Powód tego pytania pochodzi z PHP - Floating Number Precision , jednak ostateczny powód tego wszystkiego wynika ze zmiany precyzji na użycie serialize_precision w json_encode()
.
Jeśli ktoś zna rozwiązanie tego problemu, byłbym więcej niż szczęśliwy, mogąc wysłuchać uzasadnienia / poprawki.
Wyciąg z tablicy wielowymiarowej (przed):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
a po przejściu 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);
prawdopodobnie spowodowałoby to serializację, tak jak kiedyś, jednak jeśli naprawdę polegasz na określonej precyzji na swoich pływakach, robisz coś źle.