我已经编写了很多PHP应用程序,并且偶然发现了一个奇怪的场景。圆函数似乎不是在一组非常复杂的代码中工作。在打电话之前,我尝试了许多不同的事情,但这并不起作用。给定round($val,2)
时,函数返回0.56000000000000001,$val=0.5600
。这显然应该返回0.56。
我已将代码更改为使用number_format($val,2,',','')
。这似乎解决了这个问题,但现在我第二次猜测我的所有其他代码。
我应该用number_format替换round到处吗?是否有人有过类似的错误?
另外要注意,这似乎与本例中使用的PhpExcel相关联。 https://github.com/PHPOffice/PHPExcel/issues/237
答案 0 :(得分:2)
无需将round
替换为number_format
。您可以使用带有标记的round
向下舍入。
选择最适合应用程序的内容。
float
?使用round
number_format
<?php
$number = '0.5600';
echo round((float)$number, 2, PHP_ROUND_HALF_DOWN);
答案 1 :(得分:0)
问题是并非每个十进制数都可以在标准浮点中精确表示。这是一个非常普遍的问题,你的并不是唯一的。如果你需要精确的表示,那么你所做的,即将浮点数转换为字符串,就足够了。
其他一些解决方案:
==
转换为<=
或>=
==
转换为公差,例如b–ε ≤ a ≤ b+ε
,ε
相对于|a|
或|b|
或两者都有一些常数或值