不要用等号去比较浮点数的真理
“不要用等号去比较浮点数”的“真理”--有时候浮点数比较不会出问题,但是并不是所有情况的浮点数比较都是对的,请看下面例子。
<?php $sum = "12300.00"; $a = "10000.30"; $b = "2000.30"; $c = "299.40"; $sum = (float) $sum; $s = (float) ($a+$b+$c); var_dump($sum, $s); var_dump($sum==$s); ?>
结果是:
float(12300)
float(12300)
bool(false)
*其实要比较两个浮点数的大小,可以用bccomp(参数1,参数2,小数位)来比较。
<?php $sum = "12300.00"; $a = "10000.30"; $b = "2000.30"; $c = "299.40"; $sum = (float) $sum; $s = (float) ($a+$b+$c); var_dump($sum, $s); var_dump(bccomp($sum,$s,2)); ?>
结果是:
loat(12300)
float(12300)
int(0) // 0表示两个浮点数值相等