这不是一个问题,因为更多的是要意识到。我将使用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}

07-24 17:18
查看更多