That did the trick. Thanks a million. Brian "Jasper Bryant-Greene" <jasper@xxxxxxxxxxxxxxxxxx> wrote in message news:430B9867.2070000@xxxxxxxxxxxxxxxxxxxxx > Brian P. O'Donnell wrote: > > <? > > > > $a = 252.73; > > $b = 252.73; > > $c = 0; > > > > if ($a == ($b + $c)) > > { > > // do the first thing > > } > > elseif ($a > ($b + $c)) > > { > > // do the second thing > > } > > elseif ($a < ($b + $c)) > > { > > // do the third thing > > } > > > > ?> > > > > Each of the three variables is derived by some earlier calculation, but for > > testing purposes I have made sure that they end up being $a = $b and $c = 0. > > I have tested for three different values (of $a) and gotten all three > > results. That is, once the first block has executed, once the second block > > and once the third block. > > > > Am I missing something really obvious here? > > This is an inherent problem with floating-point operations, especially > comparison, and is not unique to PHP. Often numbers will be off by some > miniscule amount, just enough to make them not equal. > > What I would do in this situation is create a function float_equals(), > after deciding what delta is acceptable for your situation, like this: > > define('MAX_FLOAT_DELTA', 0.001); // Or whatever is acceptable for you > > function float_equals($a, $b) { > return (abs($a - $b) <= MAX_FLOAT_DELTA); > } > > Then use float_equals($x, $y) instead of $x == $y. > > Jasper -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php