微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在PHP 7.1.1中使用json_encode浮点值?

PHP在json_encode中处理小数精度的方式似乎有a bug.

通过编码一个简单的浮点数很容易看出:

echo json_encode(["testVal" => 0.830]);

// Prints out:
{"testVal":0.82999999999999996003197111349436454474925994873046875}

我不是一个服务器管理员,所以除了进入PHP.ini并将serialize_precision更改为-1之外,我可以在我的代码中做些什么来防止这种情况,因为我无法确定它是否正在运行该设置已更改的环境?

编辑:
我肯定有些评论会想要与为什么存在浮点不精确性的一般性讨论联系起来.我知道.我在这里的问题是关于在PHP中处理它的最佳实践,以及是否有一种方法可以对其进行防御性编码.当然有一种比将浮动作为字符串发送更好的方法.

解决方法:

您应该配置’precision‘和’serialize_precision’参数.

precision = 14
serialize_precision = -1

测试用例:

PHP -r 'ini_set("precision", 14); ini_set("serialize_precision", -1); var_dump(json_encode(["testVal" => 0.830]));'
string(16) "{"testVal":0.83}"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐