ID: 49871 User updated by: daniel dot buschke at nextiraone dot de Reported By: daniel dot buschke at nextiraone dot de Status: Bogus Bug Type: Math related Operating System: Linux PHP Version: 5.2.11 New Comment:
(int)(string)$b that does the job but is ugly, too Previous Comments: ------------------------------------------------------------------------ [2009-10-14 11:16:23] [email protected] 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. ------------------------------------------------------------------------ [2009-10-14 08:36:03] daniel dot buschke at nextiraone dot de Description: ------------ Hi, when I convert following float: float(232) into an int I get: int(231). The float was calculated by 2.32 * 100. I know that this may result in 232.00000000001 or 231.999999999 but the behavior is unexcpected because var_dump does not show the real (more or less wrong) float number. This one is exact the same as #2835 but the bug was closed without any further comments. The provided solution is unacceptable. How to convert 2.32 into an integer of the value 232? BTW: Please do not set this bug to bogus or closed with the default text for that problem ;-). As you can see in your bugtracker the community wants a solution for that. Please also remember that PHP is a scripting language which mainly ignores datatypes. This problem is not comprehensible to beginners (webdesigners ;-) ). I do not want to blame you with that but I just want to find a usefull solution. Please keep communication with community. regards Daniel Reproduce code: --------------- <?php messUpFloat(2.32); messUpFloat(8.28); function messUpFloat($float) { echo '--------- ' . $float . ' --------' . PHP_EOL; $a = $float; var_dump($a); $b = $a * 100 + 0; var_dump($b); $c = (int)$b; var_dump($c); } ?> Expected result: ---------------- --------- 2.32 -------- float(2.32) float(232) int(232) --------- 8.28 -------- float(8.28) float(828) int(828) or (but not preferred ;-) ) --------- 2.32 -------- float(2.32) float(231.999999999999999) int(231) --------- 8.28 -------- float(8.28) float(827.999999999999999) int(827) Actual result: -------------- --------- 2.32 -------- float(2.32) float(232) int(231) --------- 8.28 -------- float(8.28) float(828) int(827) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=49871&edit=1
