Bug #54985 [Opn->Asn]: round doesn't work with non-14 precision
| From: | cataphract@php.net | Date: | Fri, 10 Jun 2011 18:01:22 +0000 |
| Subject: | Bug #54985 [Opn->Asn]: round doesn't work with non-14 precision | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-161285@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=54985&edit=1
ID: 54985
Updated by: cataphract@php.net
Reported by: jille at hexon dot cx
Summary: round doesn't work with non-14 precision
-Status: Open
+Status: Assigned
Type: Bug
Package: *Math Functions
Operating System: n/a
PHP Version: 5.3.6
-Assigned To:
+Assigned To: cataphract
Block user comment: N
Private report: N
Previous Comments:
------------------------------------------------------------------------
[2011-06-03 16:10:14] jille at hexon dot cx
Description:
------------
Round() doesn't work right when the precision is set to e.g. 16.
The last comment in #51701 also makes notice of this. (However it seems unrelated to that
bugreport.)
Bug #5500 states that you shouldn't set the precision higher than the data-type can hold. If
that's still true I think we should add a warning when setting the precision too high instead
of just accepting it and trying to work it out.
_php_math_round in ext/standard/math.c cites:
if ((precision_places = php_intlog10abs(value)) > 0) {
precision_places = 14 - php_intlog10abs(value);
} else {
precision_places = 14;
}
and I guess 14 shouldn't be hardcoded there.
Test script:
---------------
php > ini_set('precision', 30);
php > var_dump(round((5.5/100), 3));
Expected result:
----------------
float(0.055)
Actual result:
--------------
float(0.0550000000000000002775557561563)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=54985&edit=1