PHP似乎有a bug处理json_encode中的十进制精度的方式。如何json_encode在PHP 7.1.1中浮点值?
这很容易通过编码一个简单的浮动看到的只是:
echo json_encode(["testVal" => 0.830]);
// Prints out:
{"testVal":0.82999999999999996003197111349436454474925994873046875}
我没有太大的服务器管理的,所以除了去到php.ini并改变serialize_precision
为-1,是有在我的代码中可以做的任何事情来防止这种情况发生,当我无法确定它是否在该设置已更改的环境中运行时?
编辑: 我敢肯定,一些意见将希望链接到为什么浮点不精确存在的一般讨论。我知道。我的问题是关于在PHP中处理它的最佳实践,以及是否有防御性代码的方法。当然,有比将花车作为字符串发送更好的方法。
会发生这种情况在7.0呢? –
正如您关于错误报告的讨论清楚地表明的那样,这不是一个错误,而是一个故意的特征。如果您的服务器配置为高精度地序列化浮点数,那么'json_encode'现在就会尊重这一点。 – IMSoP
如果你将该值写入字符串?那么你有你想要的确切数字。 – Stony