ID:               47418
 User updated by:  cu19 at gmx dot de
 Reported By:      cu19 at gmx dot de
-Status:           Feedback
+Status:           Open
 Bug Type:         *Math Functions
-Operating System: WinXP SP3
+Operating System: Win7
-PHP Version:      5.3CVS-2009-02-17 (CVS)
+PHP Version:      5.3.1
 New Comment:

That's nothing different, but exactly the same problem as I described
from the beginning.

This is the function that I currently use as a workaround. It works
fine, but I would prefer php doing this itself...

function my_number_format ($number, $decimals=0, $dec_point=',',
$thousands_sep='.') {
        $string = number_format($number, $decimals, $dec_point,
$thousands_sep);
        $pos = strlen($string) - 1;
        $increase = false;
        while ($pos >= 0) {
                if (($increase) and (is_numeric($string{$pos}))) {
                        $string{$pos} = chr(ord($string{$pos}) + 1);
                        $increase = false;
                }
                if ($string{$pos} == ':') {
                        $string{$pos} = '0';
                        $increase = true;
                }
                $pos--;
        }
        if ($increase)
                $string = '1' . $string;
        return $string;
}


Previous Comments:
------------------------------------------------------------------------

[2010-02-12 11:37:38] paj...@php.net

For the garbage problem, that's something else. 

Can you provide a reproduce script (with data) please?

------------------------------------------------------------------------

[2010-02-12 11:31:41] tdietsche at comcast dot net

this sure IS a bug, scott_mac you need to wake up, if this is the best
that php handles floating point then it is worthless. In reading a value
of "19" from an excel spreadsheet via odbc, it formats it as "18.:0"
which is pure garbage and a bug to me. How can you defend that?
I can send my code if you want.

------------------------------------------------------------------------

[2009-02-25 01:00:01] php-bugs at lists dot php dot net

No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".

------------------------------------------------------------------------

[2009-02-17 11:20:31] scott...@php.net

sc...@skinny [~] $ php -r 'var_dump(number_format(3.9, 2));'
string(4) "3.90"

Can't reproduce this on Linux.

------------------------------------------------------------------------

[2009-02-17 10:35:08] cu19 at gmx dot de

I don't think it's a problem with limited precision but rather about
the function itself. I think a float should be able to represent 3
digits without a problem. The hex representation of the float that is to
be formatted is 0x40799998, which equals to about 3.8999996.

I think number_format should be able to round this to '3.90' instead of
displaying it as '3.8:'

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/47418

-- 
Edit this bug report at http://bugs.php.net/?id=47418&edit=1

Reply via email to