Edit report at http://bugs.php.net/bug.php?id=54479&edit=1
ID: 54479 Updated by: der...@php.net Reported by: for-bugs at hnw dot jp Summary: round(1e15+0.1) returns 1e15+0.1 instead of 1e15 -Status: Open +Status: Bogus Type: Bug Package: Math related Operating System: any PHP Version: 5.3.6 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: ------------------------------------------------------------------------ [2011-04-06 19:22:45] for-bugs at hnw dot jp Description: ------------ When round() is called with 1 argument which value is between 1e15 and 2^53, round() returns non-rounded value even if the value has fractional part. For instance, though 1e15 is exact number as IEEE 754 double precision, round(1e15+0.1) returns 1e15+0.1. I think 1e15 is better result. Test script: --------------- <?php 'ini_set("precision",18); var_dump(round(1000000000000000.1)); Expected result: ---------------- float(1000000000000000) Actual result: -------------- float(1000000000000000.12) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=54479&edit=1