首页 > 解决方案 > PHP 浮点数不保存到变量或准确回显

问题描述

最近,我的本地环境开始回显/保存带有两个小数点的浮点数,并在末尾附加一串数字,导致数字不准确。这种行为是最近的;它曾经表现正确。我想不出有什么特别的改变。

对于一个真正简单的例子:

echo 18.99;

这输出:

18.989999999999998

当我json_encode使用该值的数组时,问题会更加严重:

[18.989999999999998436805981327779591083526611328125]

知道什么可能导致此问题,以及如何解决它?PHP 7.1,MacOS High Sierra 10.13.2,如果有帮助的话。此外,我使用 Laravel 5.5 作为我的框架。

根据我已经完成的一些研究,我尝试将 php_ini 设置分别更改为precisionto 121417。没变。

编辑:我在 PHP 和其他语言中看到了与浮点数准确性有关的其他问题,但正如我所说,这种行为是最近才出现的,所以我不认为这仅仅是语言中的一个固有缺陷。

标签: phpfloating-point

解决方案


对于任何未来的 Google 员工:就我而言,问题在于 php.ini 的设置precisionserialize_precision错误(嗯,不符合我的需要)。我不知道他们是如何改变的;但是设置它们来14解决问题。


推荐阅读