RE: [PHP] Is php safe for e-commerce applications?

2001-12-05 Thread Jason Lotito

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]




Re: [PHP] Is php safe for e-commerce applications?

2001-12-05 Thread Jim


Would sprintf() handle your needs?

This seems to work correctly...

$val = sprintf(%.0f,(10*(8.20-0.20)));

produces a string $val equal to 80.

Is this too geeky?

Jimtronic


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]


-- 
Jim Musil
-
Multimedia Programmer
Nettmedia
-
212-629-0004
[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]