例子:
$x=10-7.9;
$y=2.1;
var_dump($x==$y);
结果为bool(false)。
再看下面的结果:
printf("%.20f",$x);
echo '<hr>';
printf("%.20",$y);
结果为
有没有很惊喜。。。。
这是因为浮点数计算涉及精度,当浮点数转为二进制时有可能会造成精度丢失。
比较浮点类型的数字时应该用bccomp ( string $left_operand
, string $right_operand
[, int $scale
= int ] ).
如果两个数相等返回0, 左边的数left_operand
比较右边的数right_operand
大返回1, 否则返回-1.
<?php
echo bccomp('1', '2') . "\n"; // -1
echo bccomp('1.00001', '1', 3); // 0
echo bccomp('1.00001', '1', 5); // 1
?>