Це не питання, оскільки це більше про те, щоб бути в курсі. Я оновив додаток, який використовує json_encode()
PHP7.1.1, і я бачив проблему зі зміною поплавків, які іноді розширювали 17 цифр. Згідно з документацією, PHP 7.1.x почав використовувати serialize_precision
замість точності при кодуванні подвійних значень. Я здогадуюсь, це спричинило приклад значення
472,185
ставати
472,18500000000006
після цього значення пройшло json_encode()
. З мого відкриття я повернувся до PHP 7.0.16 і у мене більше немає проблеми з json_encode()
. Я також спробував оновити до PHP 7.1.2, перш ніж повернутися до PHP 7.0.16.
Обґрунтування цього питання випливає з PHP - Точність плаваючого числа , однак в кінці всі причини цього полягають у зміні від точності до використання serialize_precision у json_encode()
.
Якщо хтось знає про вирішення цієї проблеми, я був би з радістю вислухати міркування / виправлення.
Витяг з багатовимірного масиву (до):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
і після проходження 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);
можливо, змусило б його серіалізуватися, як це було раніше, однак, якщо ви дійсно покладаєтесь на конкретну точність ваших плаваючих засобів, ви робите щось не так.