Edit report at https://bugs.php.net/bug.php?id=63074&edit=1
ID: 63074 Updated by: ras...@php.net Reported by: berthonneau dot olivier at gmail dot com Summary: Intval doesn't return exact value -Status: Open +Status: Not a bug Type: Bug Package: Math related Operating System: Windows Server 2008 and Ubuntu PHP Version: 5.3.16 Block user comment: N Private report: N 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://www.floating-point-gui.de/ Thank you for your interest in PHP. Previous Comments: ------------------------------------------------------------------------ [2012-09-12 16:10:45] berthonneau dot olivier at gmail dot com Description: ------------ Hi! I found a strange bug today. I have a float variable which contains 3876.0000, I want to pass it through the intval() function. I know it's already an integer because there is no decimals, but the strange thing is that intval() don't return 3876 but 3875. I experience the same thing with explicite cast. Test script: --------------- $tmp = 1370 * 1.15; echo $tmp . "<br />"; // echo 3875.5 $tmp += 0.5; echo $tmp . "<br />"; // echo 3876 $tmp = intval($tmp); echo "tmp= ". $tmp . "<br />"; // echo 3875 ======== Same thing with an explicite cast: $tmp = (int)$tmp; Expected result: ---------------- I expect that the last echo output 3876 Actual result: -------------- The last echo output 3875 instead of 3876. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=63074&edit=1