Reading the Bug report, it was mentioned if you want precision
mathmatics, use BCMath
http://www.php.net/manual/en/ref.bc.php
That will give you the precision you are looking for.
Jason Lotito
[EMAIL PROTECTED]
www.NewbieNetwork.net
-Original Message-
From: George Whiffen [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, December 05, 2001 3:05 PM
To: [EMAIL PROTECTED]
Subject: [PHP] Is php safe for e-commerce applications?
What a scary day, and it just gets worse
1. A user finds their account balance is displayed
incorrectly on one of my live e-commerce sites.
2. I discover that floor() intermittently gives the wrong
answer i.e.
print floor(10*(8.20 - 0.20));
Answer : 79
print floor(10*(8.10 - 0.10));
Answer : 80
(php 4.0.6 and 4.0.4.pl1 under Linux 2.2.19.)
3. I find this is a known feature with no intention of ever
being fixed. See http://bugs.php.net/bug.php?id=6220
print floor( (0.7 + 0.1) * 10);
Answer : 7
4. I check the php documentation that was added because of that bug
(http://www.php.net/manual/en/language.types.float.php) and
discover :-
never trust floating number results to the last digit and
never compare floating point numbers for equality.
5. I realise that the last digit might also be the first so
that means never trust anything except integers!
6. The truth really sinks in... It seems I simply cannot use
php for e-commerce applications unless I convert all money to
integers e.g. $4.32 must be handled as 432 cents, or all
arithmetic operations and comparisons have to be converted to
use bc functions. Instead of :
if ($cost == 10.00)
you must write
if (bcomp($cost,10.00,2)) == 0)
etc.,etc.
7. The horror unfolds... php is just as full of geeko-trash
as C/Perl/Java and the rest of them! I will have to spend the
rest of my life worrying about types/casts/floating point
precision and all that garbage even when I'm just adding up
dollars and cents! I can't even escape to Italy and work in
Lira, they're switching to euros with decimal places too! I
should have stayed with Java, it may be rubbish but at least
it's obviously rubbish!
Please someone, tell me I'm wrong!
Tell me that 0.1 + 0.7 can be 0.8 and not almost 0.8!
Tell me I don't have to check the last three years of work!
Tell me php isn't just for kids waiting to graduate/degradate
to Java! Tell me the techno-geeks haven't won!
Hell..
George
--
PHP General 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]
--
PHP General 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]