Bug #78492 [Com]: Comparing Value from equation to 100
| From: | sinus at sinpi dot net | Date: | Wed, 04 Sep 2019 20:04:30 +0000 |
| Subject: | Bug #78492 [Com]: Comparing Value from equation to 100 | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-222559@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78492&edit=1
ID: 78492
Comment by: sinus at sinpi dot net
Reported by: email at brunofaria dot pt
Summary: Comparing Value from equation to 100
Status: Not a bug
Type: Bug
Package: *Math Functions
Operating System: Windows 10
PHP Version: 7.3.9
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
You should always compare floats with <, >, <= or >=. In your case, make it
$value>99.999 and you'll be good.
Previous Comments:
------------------------------------------------------------------------
[2019-09-04 17:58:54] phpbugreports at gmail dot com
convert to strings is sonsense even if it works by luck, limited precision was already explained,
the value is something like "100.0000000000000142108547152020037174224853515625"
if(100 == (int)$value)
if(100 === (int)$value)
one of both would work
<?php
$value = 61.8 + 20.1 + 11.4 + 6.7;
ini_set('precision', 1000);
if(100 == (int)$value)
{
echo "true: $value\n";
}
else
{
echo "false: $value\n";
}
?>
------------------------------------------------------------------------
[2019-09-04 17:47:12] email at brunofaria dot pt
I think I'm going to convert both values to strings and them compare them to work around this
problem.
------------------------------------------------------------------------
[2019-09-04 17:35:31] email at brunofaria dot pt
Doesn't matter if its == or === always returns false.
Also, the result from the foreach loop is exactly '100' and I'm comparing to 100 ,
its the same string representation.
------------------------------------------------------------------------
[2019-09-04 16:17:05] sinus at sinpi dot net
Rule #1: never compare floats with ==.
------------------------------------------------------------------------
[2019-09-04 14:34:26] cmb@php.net
Floating point values have a limited precision. Hence a value might
not have the same string representation after any processing. That also
includes writing a floating point value in your script and directly
printing it without any mathematical operations.
If you would like to know more about "floats" and what IEEE
754 is, read this:
http://www.floating-point-gui.de/
Thank you for your interest in PHP.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=78492
--
Edit this bug report at https://bugs.php.net/bug.php?id=78492&edit=1