floating-point - PHP 7.3 浮点数计算后的错误行为
问题描述
以下在 PHP 7.3.15 中对我来说有一个莫名其妙的行为:
计算0.012714 * 100
PHP值的时候是1.2714
,但是对比和json_encode
ing值显示真实值不同。
这里是最简单的例子
<?php
var_dump((0.012714 * 100) === 1.2714); # false WHY? Because the real value is 1.2713999999999999
echo json_encode([(0.012714 * 100)]); # results in [1.2713999999999999]
我真的不明白发生了什么,这曾经在 PHP 7.0 中完美运行。
我已经阅读了有关 json_encode 和浮点数的信息,但情况并非如此,因为比较也失败了。
奇怪的是,这完全适用于完全相同的代码,但数字减少了十分之一。
<?php
var_dump((0.12714 * 10) === 1.2714); # true
echo json_encode([(0.12714 * 10)]); # results in [1.2714]
如何恢复旧的行为?
解决方案
这似乎与此错误报告有关,重新创建之前行为的一种易于应用的解决方案是将值PHP 7.1
简单地设置为.serialize_precision
14
<?php
ini_set('serialize_precision', 14);
推荐阅读
- reactjs - 即使启用,Babel 在导出默认值时也失败
- sql - SQL 检查约束使用 LIKE 和 OR
- python - 使用正则表达式和 Pandas 分隔字符串
- r - 仅当一列包含特定值时,删除至少包含 NA 的行
- c# - VS2019 (16.8.1)、C#、XML 注释、智能感知未显示
- flutter - Flutter、DropDownButton 检测到 0 个或 2 个或多个 [DropdownMenuItem] 具有相同的值
- sql - 计算不同单词在列中出现的次数 Oracle 12c SQL
- android - Android Camera2 输出分辨率与请求的分辨率不匹配
- c# - 如何在 EF 中包含对象的所有级别?
- xamarin.android - 如果将 Xamarin.Android 项目的 IDE 从 VS 2017 社区版更改为 VS 2019 社区版,是否会出现潜在问题?