Re: Fw: (Bug) Numeric fault calculation

From: Michal Kozusznik <kozusznik(dot)michal(at)ifortuna(dot)cz>
To: <pgadmin-support(at)postgresql(dot)org>
Subject: Re: Fw: (Bug) Numeric fault calculation
Date: 2013-04-23 10:06:22
Message-ID: 51765D1E.1000102@ifortuna.cz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-support

Intresting thing. I never thought it is so loose.
On the other side, I would never use double for currency calculations.
It provides instability to results due to floating point precision.

However due to this:

> /Thescaleof anumericis the count of decimal digits in the fractional
> part, to the right of the decimal point/

Try to this:
SELECT (260739.94 * (1.00000000000000000000000000000/365))
_____________________
714.3560000000000000000000000714356

With regards

On 23.4.2013 11:17, Kanitchet Vaiassava wrote:
>
> Dear pg's support and Alexander
>
> Allow me to quote this reference from :
> http://www.postgresql.org/docs/9.1/static/datatype-numeric.html
>
> /"*_The type_**_numericcan store numbers with a very large number of
> digits and perform calculations exactly. It is especially recommended
> for storing monetary amounts and other quantities where exactness is
> required._* However, arithmetic onnumericvalues is very slow compared
> to the integer types, or to the floating-point types described in the
> next section./
>
> /We use the following terms below: Thescaleof anumericis the count of
> decimal digits in the fractional part, to the right of the decimal
> point. Theprecisionof anumericis the total count of significant digits
> in the whole number, that is, the number of digits to both sides of
> the decimal point. So the number 23.5141 has a precision of 6 and a
> scale of 4. Integers can be considered to have a scale of zero."/
>
> Thai is the documentation that has been show right now. It's mean that
> others developer may using this recommended "numeric" in financial and
> accounting which is mission critical. right?
> So I think this problem should be solve? or at least, it should
> be note in document for other developer to be more careful.
>
>
> *From:* Alexander Yerenkow <mailto:yerenkow(at)gmail(dot)com>
> *Sent:* Tuesday, April 23, 2013 3:48 PM
> *To:* Kanitchet Vaiassava <mailto:kanichet(at)hotmail(dot)com>
> *Cc:* pgadmin-support(at)postgresql(dot)org
> <mailto:pgadmin-support(at)postgresql(dot)org> ; Kanitchet Vaiassava
> <mailto:kanitchet(dot)vai(at)thaiace(dot)co(dot)th> ; Thanarit Maneechote
> <mailto:thanarit(dot)man(at)thaiace(dot)co(dot)th>
> *Subject:* Re: [pgadmin-support] (Bug) Numeric fault calculation
>
> Try
>
> select (260739.94::double precision * (1.00::double precision /
> 365.00::double precision) )
>
> default precision in postgres is pretty lossy, use double precision
> whenever you need max precision.
>
>
>
>
> 2013/4/23 Kanitchet Vaiassava <kanichet(at)hotmail(dot)com
> <mailto:kanichet(at)hotmail(dot)com>>
>
> *_(Bug) Numeric fault calculation_*
> My company has using postgresql as database for ERP
> application which in-house developed.
> For store financial and accounting data, we chose "numeric" type
> for accurate calculation (and with recommend by postgres's
> documentation) and we faced the problem by using "double
> precision" before.
> However, we found that by using numeric had the problem too.
> In our formula for calculate interest for customer's overdue
> payment that using numeric,
> we found that it had fault calculate. So, it effected our interest
> amount.
> In the attached file you can see that the result from postgresql
> and by using long division method is difference.
> *postgresql :* 714.35599999999xxxx
> *long division method*: 714.356
> and if we multiply this result with interest rate and others
> factor and round up later. the amount is miscalculate.
> Thank you and sorry for bad english gramma.
> Best Regards,
> Kanitchet Vaiassava
> ThaiAce Group
> 555 Nawamin Rd., Klongkum, Buengkum, Bangkok 10230, Thailand
> Mobile +66 89 515 9955 <tel:%2B66%2089%20515%209955>; Office +66 2
> 744 2288 <tel:%2B66%202%20744%202288>; Fax +66 2 379 1166
> ---------------------------------------------------------------------------------------------------------------
>
>
> --
> Sent via pgadmin-support mailing list
> (pgadmin-support(at)postgresql(dot)org
> <mailto:pgadmin-support(at)postgresql(dot)org>)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgadmin-support
>
>
>
>
> --
> Regards,
> Alexander Yerenkow

In response to

Browse pgadmin-support by date

  From Date Subject
Next Message Guillaume Lelarge 2013-04-23 19:11:20 Re: Date column types
Previous Message Kanitchet Vaiassava 2013-04-23 09:17:09 Fw: (Bug) Numeric fault calculation