Re: Weird results of "=="
| From: | Jasper Bryant-Greene | Date: | Tue, 23 Aug 2005 21:43:03 +0000 |
| Subject: | Re: Weird results of "==" | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-221215@lists.php.net to get a copy of this message | ||
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