意外的PHP数学小数操作


unexpected php math decimals operation

    $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!? :@";

问题是为什么会这样?如果在视觉上看起来相同,一个厚实的解决方案是对$nt2执行number_format(),但是…为什么? ?

update:: $nt-$nt2输出3.6379788070917E-12

http://php.net/manual/en/language.types.float.php看到那个红色的大警示牌了吗?:)

对于浮点数的比较,可以使用:

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

(将0.00001更改为所需的比较精度)

Per Zend:

PHP在比较两个浮点数时似乎没有做合乎逻辑的事情,这是由于数字的内部表示。解决方案就是永远不要比较浮点数是否相等!

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