这不是问题,因为更多的是要意识到。我更新了一个使用json_encode()
PHP7.1.1的应用程序,然后看到一个问题,即浮点数被更改为有时会扩展到17位数字。根据文档,serialize_precision
在对双精度值进行编码时,PHP 7.1.x开始使用而不是精度。我猜这引起了一个示例值
472.185
成为
472.18500000000006
那个价值过去了json_encode()
。自发现以来,我已恢复为PHP 7.0.16,不再遇到的问题json_encode()
。在还原到PHP 7.0.16之前,我还尝试了更新到PHP 7.1.2。
这个问题背后的原因确实来自PHP-浮点数精度,但是最终的所有原因都是因为从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);
可能会使它像以前那样进行序列化,但是,如果您确实依赖浮动对象的特定精度,则说明您做错了什么。