$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.