This has to do with the floating point precision.

I quote the manual:
It is quite usual that simple decimal fractions like 0.1 or 0.7 cannot be
converted into their internal binary counterparts without a little loss of
precision. This can lead to confusing results: for example,
floor((0.1+0.7)*10) will usually return 7 instead of the expected 8 as the
result of the internal representation really being something like
7.9999999999....

This is related to the fact that it is impossible to exactly express some
fractions in decimal notation with a finite number of digits. For instance,
1/3 in decimal form becomes 0.3333333. . ..

So never trust floating number results to the last digit and never compare
floating point numbers for equality. If you really need higher precision,
you should use the arbitrary precision math functions or gmp functions
instead.


Hope this helps you

Randal

----- Original Message ----- 
From: "ruben" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, November 17, 2003 1:52 PM
Subject: [PHP] Unexpected result in floor function


> Hi:
>
> Why is the "floor" function returning 27564 instead of 27565 in this
> script? PHP version is 4.2.2.
>
> Thanks!
> Ruben.
>
>
>
> #!/usr/bin/php -q
>
> <?php
>
> $b = 275.65 * 100;
> echo "\n\nb= ".$b;
> echo "\nfloor(b)= ".floor($b);    // Incorrect. why 27564?
>
> $b = 27565;
> echo "\n\nb= ".$b;
> echo "\nfloor(b)= ".floor($b)."\n\n";    // Correct
>
> ?>
>
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to