PHP似乎在处理json_encode中的小数精度方面存在错误.
通过编码一个简单的浮点数很容易看出:
echo json_encode(["testVal" => 0.830]);
// Prints out:
{"testVal":0.82999999999999996003197111349436454474925994873046875}
Run Code Online (Sandbox Code Playgroud)
我不是一个服务器管理员,所以除了进入php.ini并更改serialize_precision为-1之外,我可以在我的代码中做些什么来防止这种情况,因为我无法确定它是否在环境中运行该设置已更改的位置?
编辑:我肯定有些评论想要与为什么存在浮点不精确的一般讨论联系起来.我知道.我在这里的问题是关于在PHP中处理它的最佳实践,以及是否有一种方法可以对其进行防御性编码.当然有一种比将浮动作为字符串发送更好的方法.
您应该配置' precision '和'serialize_precision'参数.
precision = 14
serialize_precision = -1
Run Code Online (Sandbox Code Playgroud)
测试用例:
php -r 'ini_set("precision", 14); ini_set("serialize_precision", -1); var_dump(json_encode(["testVal" => 0.830]));'
string(16) "{"testVal":0.83}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3242 次 |
| 最近记录: |