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

时间:2017-05-09 09:18:13

标签: php json

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:7)

您应该配置“precision”和“serialize_precision”参数。

DatePickerDialog dialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
dialog.getDatePicker().setMaxDate(new Date().getTime());

测试用例:

precision = 14
serialize_precision = -1