json_encode()
的应用程序到PHP7.1.1后,发现在处理浮点数时会将其扩展到17位。根据文档,PHP 7.1.x开始使用serialize_precision
代替精度来编码双精度值。我猜这导致了一个例子值
472.185
在通过json_encode()
处理后变成了
472.18500000000006
自从我发现这个问题后,我已经恢复到了PHP 7.0.16,并且再也没有遇到使用json_encode()
时出现的这个问题。我还尝试升级到PHP 7.1.2,但最终还是回到了PHP 7.0.16。
这个问题的原因源于PHP - Floating Number Precision,不过归根结底是由于在json_encode()
中使用了serialize_precision而非precision。
如果有人知道如何解决这个问题,我很乐意听听相关的解释和修复方案。
多维数组摘录(之前):
[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);
的作用是让序列化结果像以前一样,但如果您真的依赖于浮点数的特定精度,那么您可能做错了什么。 - apokryfos