这不是一个问题,因为更多的是要意识到。我将使用json_encode()
的应用程序更新为PHP7.1.1,并且看到浮点数被更改为有时扩展为17位的问题。根据文档,在对 double 值进行编码时,PHP 7.1.x开始使用serialize_precision
而不是精度。我猜这引起了一个示例值
成为
该值之后通过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"
}
},
最佳答案
这让我有点发疯,直到我终于找到this bug,它将您指向this RFC,其中说
和(强调我的)
简而言之,有一种新方法可以使PHP 7.1 json_encode
使用新的和改进的精度引擎。在 php.ini 中,您需要将serialize_precision
更改为
serialize_precision = -1
您可以验证它是否可以在此命令行下使用
php -r '$price = ["price" => round("45.99", 2)]; echo json_encode($price);'
你应该得到
{"price":45.99}