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]




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]