这不是一个问题,因为它更像是一个注意事项。我将使用 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.0.16 之前,我还尝试更新到 PHP 7.1.2。
这个问题背后的原因确实源于 PHP - Floating Number Precision ,但是最终的所有原因都是因为 json_encode()
中从 precision 到 serialize_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"
}
},
原文由 Gwi7d31 发布,翻译遵循 CC BY-SA 4.0 许可协议
这让我有点抓狂,直到我终于找到 了这个错误,它将你指向 这个 RFC ,它说
并且(强调我的)
简而言之,有一种使 PHP 7.1
json_encode
使用新的和改进的精度引擎的新方法。在 php.ini 中,您需要将serialize_precision
更改为您可以验证它是否适用于此命令行
你应该得到