ID: 13550
Updated by: jeroen
Reported By: [EMAIL PROTECTED]
Old Status: Open
Status: Bogus
Bug Type: *Programming Data Structures
Operating System: Linux 2.2.18
PHP Version: 4.0.6
New Comment:

No, floating point numbers are ALWAYS inprecise, and you shouldn't trust on their 
exact values.

See the warning on http://www.php.net/manual/en/language.types.float.php

The problem is that $scaled is 877.99999999999999 or something, and because of the 
precision setting in php.ini it is printed as 878, but when using (int) cast, or 
intval(), it will be rounded down (or twowards zero, don't reacall).

By the way, pow(int,int) will yield integer values when possible since 4.0.7, which 
nukes one possible source of floating point problems (unless you use 10.0 of course, 
but that doesn't make sense in PHP)

BTW: this is a FAQ, will add an entry.

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

[2001-10-05 08:35:55] [EMAIL PROTECTED]

The bug is real. Try it on the mentioned OS with glibc version mentioned in the report 
to see it.

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

[2001-10-05 08:30:42] [EMAIL PROTECTED]

Except that it doesn't, here and in many other users machines it prints:

int(2)
float(100)
string(4) "8.78"
float(8.78)
float(878)
int(877)
int(878)

glibc rpm version is 2.2-7.


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

[2001-10-05 03:58:28] [EMAIL PROTECTED]

Could you be a little less cryptic please?  I would expect this to print:
int 2
float 100
string '8.78'
float 8.78
float 878
int 878
int 878
Which is exactly what I am seeing.  $scaled = 8.78 * 100.0 which gives a double value 
of 878.00 therefore round(878.00) would be 878 and intval(878) is 878.  What exactly 
are you expecting to be different here?

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

[2001-10-04 19:08:52] [EMAIL PROTECTED]

It seems that intval does not round off double numbers like the function that prints 
those numbers. Try this script to see the problem.

<?
        $decimal_places=2;
        $decimal_factor=pow(10.0,$decimal_places);
        $value='8.78';
        $double=doubleval($value);
        $scaled=$double*$decimal_factor;
        $integer=intval($scaled);
        $round=intval(round($scaled));
        
var_dump($decimal_places,$decimal_factor,$value,$double,$scaled,$integer,$round);
?>

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



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


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to