On Thu, 06 Dec 2001 18:03:23 +0000
George Whiffen <[EMAIL PROTECTED]> wrote:

> Matthew,
> 
> You are absolutely right, we have to do something about handling money better before 
>anyone else
> notices that 0.7 plus 0.1 is not 0.8 with php!  (I've already had an e-commerce user 
>notice that
> their account balance is misquoted because 82 - 2 became 79 because of this).
> 
> Looking through this thread it seems :
> 
> 1. Floating points are not accurate, floating point arithmetic is not accurate 
>enough for money
> calculations. 
Wrong, It is fully useable for money. But not for mid-hi precision, use BCmath.


> 2. Zeev is worried that a string based type would create performance problems.
Don't need to convert to string (huh php don't take really care about type).

> 3. The standard approach when programming in low-level languages such as C or Java, 
>is to convert to
> "pennies" and rely on integer arithmetic.
Sure, best way and solve the round problem, I never used more than 5 digits for the 
floating part of a number for money numbers (bank rates and stock calculation).

> 4. bc calculations/comparisons are safe.
Sure :)

> My questions are:
> 
> 1. Is it useful to cut down the "money" problem to the bare esentials? e.g. 
>       - only handle addition/subtraction/multiplication 

>       - never worry about more than 2 decimal places
five is sometimes a must 3 needed especially with euro convertion.

>       - maximum values could be practically limited to a billion or so
As explained in the documentation or type ranges. 

> 2. Could we use integer arithmetic for money, given the above restrictions?  We only 
>have to spot a
> "money" field and carry out integer arithmetic rather than floating point 
>arithmetic.  Of course we
> need to multiply the operands by 100 before the addition and divide by 100 at the 
>end.  Would that
> bring back the floating point problem in a new guise?
Sure it does. This tip were usefull in the past with old rdms systems and improbe 
indexes with actual system (as far you need indexes on amounts).

> 3. How does mysql get away with it?  I've never had a smidgeon of trouble with mysql 
>adding
> decimals.  In fact,  my "safe" fall back for my bug will be to get mysql to do all 
>the arithmetic
> rather than php.
Mysql does not any calculation except when you use function and/or operator.
Try this :
select 1.0120000000000001/1 
and then
select 1.01200000000000001/1 

Damned 2nd one failed...

> 4. How bad could performance get?  How much non-integer, non-money, floating point 
>calculation  is
> really done in php code? Apart from some gd stuff, I can't think when I ever 
>actually do a
> non-integer, non-money calculation!
If high precision floating numbers is your need use bcmath or develop your own php 
modules using a dedicated langage or libraries. Float numbers are not finites. See the 
last Zeev post for the link about explanations.

> 5. If actual overall impact on php applications is not too bad, (even if we slow 
>floating point by a
> factor of ten), could we just use bc routines for all floating point?  Perhaps it 
>could be a
> configuration option, with the default as precise calculation i.e. use bc, and an 
>option for "fast"
> i.e. non-bc calculation?
You don't slow down your app. Integer process are generally faster (both in rdbms and 
cpu).
Except if you have a P4 and you use the Intel Compiler... ;))

> Let me say again, if we want to be treated seriously as a credible HIGH LEVEL 
>language, let alone a
> reliable e-commerce platform it is NOT ACCEPTABLE that (int) 10 * 0.7 + 0.1 is 7.  
>It doesn't matter
> how much documentation we create, it's just not on as default behaviour. So we have 
>to do something!
Damned .........

> The alternative is that sooner or later we'll be reading a press release from 
>Seattle that runs
> something like this...
> 
> PHP dangerous for e-commerce
> Reports are coming in of serious failings at e-commerce sites using php.  These 
>result from
> fundamental weaknesses in php's basic arithmetic on monetary figures.  Accounting 
>integrity is
> acknowledged to be completely compromised if developers rely on default php 
>arithmetic.  Even
> calculations such as 8.20 - 0.20 are not dependable.  The problems are particularly 
>dangerous
> because they are intermittent.  Php's development team have been aware of this for 
>over a year and
> despite their much vaunted "open source rapid response", there is no fix, nor even 
>any intention of
> a fix to this problem.  Instead they choose to highlight weaknesses in their 
>underlying C platform.
> 
> Bigsoft CEO, Robert Doorways comments : This totally vindicates our view that Open 
>Source
> technologies must not be relied upon for professional corporate applications.  Only 
>the most
> experienced and highly resourced software suppliers have the understanding and 
>capability to deliver
> to the corporate market.  We fully sympathise with customers who have been taken in 
>by the
> exaggerated claims of the Open Source movement.  We have set up a special php 
>translation facilities
> for everyone who wants to convert their php applications to a more stable language.  
> At BigSoft we
> have been counting our own and especially other people's money from our earliest 
>days, and are
> specialists in big money calculations...
OK but php is fully Y2K compliant ;)).


hth

pa
-- 
Pierre-Alain Joye
Freelance
Developpements et Services web/intranet
[EMAIL PROTECTED]

-- 
PHP Development 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]

Reply via email to