| Bug #22712 | number_format rounding differences for floats and strings | ||||
|---|---|---|---|---|---|
| Submitted: | 14 Mar 2003 2:32pm UTC | Modified: | 14 Mar 2003 2:49pm UTC | ||
| From: | hpdl at oscommerce dot com | Assigned to: | |||
| Status: | Bogus | Category: | Math related | ||
| Version: | 4.3.1 | OS: | Linux | ||
| Votes: | 1 | Avg. Score: | 5.0 ± 0.0 | Reproduced: | 1 of 1 (100.0%) |
| Same Version: | 1 (100.0%) | Same OS: | 1 (100.0%) | ||
[14 Mar 2003 2:49pm UTC] derick@php.net
It's a float/maths problem, nothing to do with PHP specific. Derick
[7 Aug 2003 1:23pm UTC] q1234562001 at mail dot ru
The script:
<?php
echo number_format(63.745, 2, '.', "") ."<br>";
echo number_format(64.745, 2, '.', "") ."<br>";
?>
Result:
63.74
64.75

We at osCommerce are witnessing rounding problems in our taxes logic and have made a reproduceable script below. number_format() produces different rounding results when floats or strings are passed to the function. <?php $price = '100.0000'; // Canada GST 7% $price = '1.07' * $price; // Canada/Quebec PST 7.5% $price = '1.075' * $price; echo '$price: ' . $price . '<br>' . "\n" . 'number_format($price, 2): ' . number_format($price, 2) . '<br>' . "\n" . 'number_format((string)$price, 2): ' . number_format((string)$price, 2); ?> The correct results are produced when the string value is passed. The float value produces incorrect results. I do not know if this is a problem with the number_format function, or if it is due to floats/mathematics.