ID: 47208 Updated by: matt...@php.net Reported By: superdude at hotmail dot com -Status: Open +Status: Bogus Bug Type: Math related Operating System: win32/64 possibly others. PHP Version: 5.2.8 New Comment:
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://docs.sun.com/source/806-3568/ncg_goldberg.html Thank you for your interest in PHP. 1.003 is stored as slightly less than that (close as possible), which can be seen when you show enough digits: printf('%.20f', 1.003); Gives 1.00299999999999989164 for me... Previous Comments: ------------------------------------------------------------------------ [2009-01-24 13:44:22] superdude at hotmail dot com Description: ------------ When multiplying a float/double that the has value of 1.003, converting it to a integer, will always return the expected value, minus 1. Reproduce code: --------------- <?php $x = 1.003; echo (int)($x*1000)."<br>\n"; echo (int)($x*10000)."<br>\n"; echo (int)($x*100000)."<br>\n"; ?> Expected result: ---------------- 1003 10030 100300 Actual result: -------------- 1002 10029 100299 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=47208&edit=1