意外的PHP数学小数运算

时间:2011-07-13 19:54:59

标签: php decimal

    $nt=(float) number_format("26031.87",2,".",""); // 26031.87
    $nt2=(float) 546669.02-520637.15; // 26031.87

    if($nt>$nt2)
     echo "$nt / $nt2 ⇽ What's wrong with this!? :@";

关键是为什么会发生这种情况?如果直观看起来相同,一个粗略的解决方案是将number_format()做到$ nt2,但是......为什么?

更新:: $ nt- $ nt2输出3.6379788070917E-12

2 个答案:

答案 0 :(得分:2)

Per Zend:

在比较两个浮点数时,PHP似乎没有逻辑性,这是由于数字的内部表示。解决方案绝对不会比较浮点数是否相等!

在比较它们之前将它们转换为INT或使用bc_math。

答案 1 :(得分:2)

http://php.net/manual/en/language.types.float.php看到那个大红色警告横幅。 :)

比较花车你可以使用:

if (abs($nt1-$nt2) < 0.00001) {
    echo "Equal!";
}

(将0.00001更改为您需要的比较精度。