ID: 42463 Updated by: [EMAIL PROTECTED] Reported By: dan dot ostrowski at gmail dot com -Status: Open +Status: Bogus Bug Type: *General Issues Operating System: Linux PHP Version: 5.2.3 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. Previous Comments: ------------------------------------------------------------------------ [2007-08-28 17:17:25] dan dot ostrowski at gmail dot com Description: ------------ When rounding (implicitly) with sprintf, halfway values are rounded using a "banker's" algorithm instead of performing the way a call to round() would. This seems inconsistent and counterintuitive for no particular reason. Thanks! Reproduce code: --------------- print sprintf("%2.2f", 0.015)."<br/>"; print sprintf("%2.2f", 0.025)."<br/>"; print sprintf("%2.2f", 0.035)."<br/>"; print sprintf("%2.2f", 0.045)."<br/>"; print "<br/>"; print round(0.015, 2)."<br/>"; print round(0.025, 2)."<br/>"; print round(0.035, 2)."<br/>"; print round(0.045, 2)."<br/>"; Expected result: ---------------- 0.02 0.03 0.04 0.05 0.02 0.03 0.04 0.05 Actual result: -------------- 0.01 0.03 0.04 0.04 0.02 0.03 0.04 0.05 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=42463&edit=1
