round() returns 多余的小数

round() returns redundant amount of decimals

我编写了很多 PHP 应用程序,只是偶然发现了一个奇怪的场景。 round 函数似乎不适用于一组非常复杂的代码。在打电话之前我已经尝试了很多不同的事情,但这根本行不通。函数 returns 0.56000000000000001 当给定 round($val,2)$val=0.5600 时。这显然应该 return 0.56。

我已更改我的代码以使用 number_format($val,2,',','')。这似乎已经解决了这个问题,但现在我第二次猜测我的所有其他代码。

我应该在所有地方用 number_format 替换 round 吗?有没有人有类似的回合错误?

另请注意,这似乎与本例中使用的 PhpExcel 相关联。 https://github.com/PHPOffice/PHPExcel/issues/237

无需将round替换为number_format。您可以使用带有标志的 round 来向下舍入。

选择最适合应用程序的内容。

  • 你在舍入 float 吗?使用 round
  • 您要格式化数字并按千位分组吗?使用 number_format

<?php 
$number = '0.5600'; 
echo round((float)$number, 2, PHP_ROUND_HALF_DOWN);

https://eval.in/297781

问题是不是每个十进制数都可以用标准浮点数精确表示。这是一个很常见的问题,你的不是唯一的。如果您需要精确表示,那么您正在做的,即将浮点数转换为字符串就足够了。

其他一些解决方案:

  • 将带浮点数的 == 转换为 <=>=
  • ==转换为公差,例如b–ε ≤ a ≤ b+εε 一些相对于 |a||b| 或两者
  • 的常数或值