我写了很多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|
或两者的某个常量或值