php - PHP 浮点数不保存到变量或准确回显
问题描述
最近,我的本地环境开始回显/保存带有两个小数点的浮点数,并在末尾附加一串数字,导致数字不准确。这种行为是最近的;它曾经表现正确。我想不出有什么特别的改变。
对于一个真正简单的例子:
echo 18.99;
这输出:
18.989999999999998
当我json_encode
使用该值的数组时,问题会更加严重:
[18.989999999999998436805981327779591083526611328125]
知道什么可能导致此问题,以及如何解决它?PHP 7.1,MacOS High Sierra 10.13.2,如果有帮助的话。此外,我使用 Laravel 5.5 作为我的框架。
根据我已经完成的一些研究,我尝试将 php_ini 设置分别更改为precision
to 12
、14
和17
。没变。
编辑:我在 PHP 和其他语言中看到了与浮点数准确性有关的其他问题,但正如我所说,这种行为是最近才出现的,所以我不认为这仅仅是语言中的一个固有缺陷。
解决方案
对于任何未来的 Google 员工:就我而言,问题在于 php.ini 的设置precision
和serialize_precision
错误(嗯,不符合我的需要)。我不知道他们是如何改变的;但是设置它们来14
解决问题。
推荐阅读
- rocket.chat - _appsUpdateMarketplaceInfo 调用在服务器启动期间失败
- python - AttributeError: 模块“”没有属性“命令”
- swagger - 如何以自动化方式合并/聚合来自多个应用程序的开放 API 规范
- android-studio - Android Studio 中缺少一些 SDK 工具选项
- python - raise ValueError(ValueError: With n_samples=0, test_size=0.1 and train_size=None,
- pandas - 如何在熊猫中将 mxn 转换为 kx 2 形式的数据帧
- scala - Spark 和 Scala 代码启用 KRBLoginModule 与 system.setProperty throwing error no LoginModule found
- dax - DAX PowerPivot 中的计数
- node.js - 使用 twilio 添加自定义 callerid discord bot
- javascript - 解析 HashMap 失败,应为 Object,但遇到 Array