php - 如何在 PHP 7.1.1 中对浮点值进行 json_encode?

标签 php json

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

编码一个简单的 float 就很容易看出来:

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

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

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

编辑: 我敢肯定,有些评论会希望链接到关于为什么存在浮点不精确的一般性讨论。我知道。我在这里的问题特别是关于在 PHP 中处理它的最佳实践,以及是否有一种方法可以针对它进行防御性编码。肯定有比将 float 作为字符串发送更好的方法。

最佳答案

您应该配置“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}"

关于php - 如何在 PHP 7.1.1 中对浮点值进行 json_encode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43865885/

相关文章:

php - 将 PHP session 从一个目录传递到另一个在 public_html 中并行创建的目录

json - Docusign API 使用模板和模板中的自定义字段未通过 HttpRequest 填充

c# - 在嵌套对象上使用 JsonConvert.DeserializeObject

javascript - 从 Bootstrap typeahead 和 JSON 制作可点击的结果列表

php - MySQLi 获取结果并创建键值数组

php - 在 Laravel 中设置加密 key 导致注销

ruby-on-rails - 从 Rails 应用程序为 JSON 创建通用模板

IOS 应用程序崩溃 - 但不是在模拟器中 - 硬编码 URL 有效

php - 提供的参数不是有效的 MySQL 结果资源

php - 在一个查询中从多个表中选择记录