ID: 50622 Updated by: ras...@php.net Reported By: okycastro at gmail dot com -Status: Open +Status: Bogus Bug Type: *Math Functions Operating System: windows vista PHP Version: 5.2.12 New Comment:
Computers use IEEE754's two's complement method to store floating point numbers. That standard has both +0 and -0, for better or worse. When computers store integers you only have one 0. So, in your case, since you are obviously interested in the integer floor, you should change your code to: $i= (float) -90; $a= (int) 0; echo (int)floor($i * ($a / 100)); We are not going to stray from IEEE754 here. Every language out there does exactly the same. Previous Comments: ------------------------------------------------------------------------ [2009-12-31 14:30:04] okycastro at gmail dot com Description: ------------ -0 is returns under the following example. I believe this is a bug. I see there was a bug about this a long time ago, But I think that the concept of a -0 is an invalid one. it just makes no sense. Even more if you consider that the following line will never gets executed if ($x < 0) //$x = -0 //NEVER EXECUTED if ($x <= 0) //$x = -0 //GETS EXECUTED Reproduce code: --------------- $i= (float) -90; $a= (int) 0; echo floor($i * ($a / 100)); returns -0;//MY OPINION IS AN ERROR $i= (int) -90; $a= (int) 0; echo floor($i * ($a / 100)); returns 0;//OK Expected result: ---------------- 0 should be returned always Actual result: -------------- -0 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=50622&edit=1