Pau*_*ers 1 php floating-point comparison numeric
我将两个数字字符串$ a和$ b加在一起,然后将结果与另一个数字字符串$ c进行比较.所有三个数字都存储为字符串,并在比较步骤中由PHP转换为浮点数.
出于某种原因,测试$ a + $ b == $ c不会评估为真,即使它应该.
您可以使用此脚本重新创建问题:
<?php
$a = "-111.11";
$b = "-22.22";
$c = "-133.33";
echo '$a is '.$a."\n";
echo '$b is '.$b."\n";
echo '$c is '.$c."\n";
echo '$a + $b is '.($a+$b). "\n";
if ($a + $b == $c) {
echo 'a + b equals c'."\n";
} else {
echo 'a + b does not equal c'."\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我稍微更改这些值,以便$ a = -111.11,$ b = -22.23和$ c = -133.34,它会按预期工作.
我错过了一些明显的东西,或者这是PHP的错误?
在此页面上的大红色框中:http://php.net/manual/en/language.types.float.php
从不比较浮点数是否相等.
基本上,你没有得到正确的数字,因为它们以稍微不同的格式保存,所以当你比较时,它会被搞砸.
@Corbin的链接非常好,所以我只是为了爱而添加它:)
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
每个计算机科学家应该知道的浮点运算
本文提供了一个关于浮点的方面的教程,这些方面对计算机系统的设计者有直接影响.它首先介绍浮点表示和舍入误差,继续讨论IEEE浮点标准,最后总结了许多计算机构建器如何更好地支持浮点的例子.