round() 返回冗余的小数位数


round() returns redundant amount of decimals

我写了很多PHP应用程序,只是偶然发现了一个奇怪的场景。round 函数似乎无法在一组非常复杂的代码中工作。在打电话之前,我已经尝试了很多不同的东西,但这不起作用。该函数在给定 round($val,2) 时返回 0.5600000000000001,并带有 $val=0.5600 。这显然应该返回 0.56。

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

我应该在任何地方用number_format代替圆形吗?有没有人在回合中遇到过类似的错误?

另外要注意的是,这似乎与在这种情况下使用的PhpExcel有关。 https://github.com/PHPOffice/PHPExcel/issues/237

没有必要用number_format替换round。您可以使用带有标志的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|或两者的某个常量或值