不要用等号去比较浮点数的真理

  “不要用等号去比较浮点数”的“真理”--有时候浮点数比较不会出问题,但是并不是所有情况的浮点数比较都是对的,请看下面例子。

<?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表示两个浮点数值相等

posted @ 2014-01-21 18:36  洒洒  阅读(386)  评论(0编辑  收藏  举报