为什么会这样?我可以阻止这个吗? (除了将它们作为字符串传递)
var_dump(json_encode([1002.31, 2002.42]));
输出:
string(39) "[1002.3099999999999,2002.4200000000001]"
答案 0 :(得分:2)
这是由于浮点不准确而发生的,因为它们不能直接用二进制表示。 一个解释其中一些is here的网站。
快速修复可能是将它们作为字符串传递并在另一端将它们转换回来,或者将它们乘以整数然后再转换回另一端。
可悲的是,没有真正的解决方法。对于这种行为。
答案 1 :(得分:1)
您应该配置' precision'和' serialize_precision' PARAMS。
precision = 14
serialize_precision = -1
测试用例:
php -r 'var_dump(json_encode([1002.31, 2002.42]));'
string(39) "[1002.3099999999999,2002.4200000000001]"
php -r 'ini_set("precision", 14); ini_set("serialize_precision", -1); var_dump(json_encode([1002.31, 2002.42]));'
string(17) "[1002.31,2002.42]"