ID:               27744
 User updated by:  t dot steve at ariadne-quatra dot com
 Reported By:      t dot steve at ariadne-quatra dot com
 Status:           Bogus
 Bug Type:         Math related
 Operating System: *
 PHP Version:      *
 New Comment:

Hi!



I am sure I am something, apologies for that. :(



"Guys, how in the world is PHP supposed to magically guess what
precision you want results displayed in."



141.23 - 141 _is_ precisely 0.23. If I was asking for 1/3, then I would
understand the decimal places. But how come 141.23-141 turns out to
have so many decimal places in the end instead of just being 0.23 - the
mathematically correct and precise result?


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

[2004-03-30 19:59:05] [EMAIL PROTECTED]

Guys, how in the world is PHP supposed to magically guess what
precision you want results displayed in.  If you know you always want
lower precision, set that in your php.ini file.  Or if you just want it
temporarily simply do:



$old = ini_set('precision',2);

echo (string)(750 - 749.99);

ini_set('precision',$old);



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

[2004-03-30 19:47:47] [EMAIL PROTECTED]

create table a ( b float,c float );

Query OK, 0 rows affected (0.11 sec)

 

mysql> insert into a (b,c) values (141.23,141);

Query OK, 1 row affected (0.07 sec)

 

mysql> select b-c from a;

+------------------+

| b-c              |

+------------------+

| 0.22999572753906 |

+------------------+

1 row in set (0.00 sec)





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

[2004-03-30 13:45:03] [EMAIL PROTECTED]

That is the whole point of the answer. Floating point values are not
accurate and are not nice. And we do not do a bunch of work just to
make them look better in certain circumstances.

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

[2004-03-30 12:07:45] garbo_doe at hotmail dot com

IMHO I think this is a bug. Of course there are problems with
floatingpoint values in binary form, especially when rounded many
times. But in an operation like <?php echo (string)(750 - 749.99) ?> it
shouldn't return "0.00999999999999" but "0.01". 

I did a quick test in Delphi: showmessage(floattostr(750 - 749.99));
returns "0.01, not "0.00999999999999".



I had to solve it in PHP but multiplying with 100, then subtract and
then divide the result by 100 again. 

It's not pretty :-D

(0.00999[infinite 9's] IS exactly the same as 0.01, but it should
remember the "infinite" with a bit or something, so (1/3)*3 = 1 and not
0.999999999)



(this is similar as bug #8164)

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

[2004-03-29 01:06:46] [EMAIL PROTECTED]

Floating point values have a limited precision. Hence a value might 
not have the same string representation after any processing. That also
includes writing a floating point value in your script and directly 
printing it without any mathematical operations.
 
Thank you for your interest in PHP.

.

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

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/27744

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

Reply via email to