Это не вопрос, так как нужно знать. Я обновил приложение, использующее 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);
вероятно, заставит его сериализоваться, как раньше, однако, если вы действительно полагаетесь на определенную точность своих поплавков, вы делаете что-то не так.