From: | Mark Kirkwood <markir(at)paradise(dot)net(dot)nz> |
---|---|
To: | Justin <justin(at)emproshunts(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: math error or rounding problem Money type |
Date: | 2008-06-08 00:05:34 |
Message-ID: | 484B224E.4080806@paradise.net.nz |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Justin wrote:
> yes. The question is why are the to sides not equal anymore
>
> Take this
>
> Select
> '2',
> round(sum( beginBalance ),6) as beginbalance,
> round(sum( negative ),6) as debit,
> round(sum( positive ),6) as credit,
> round(sum( difference ),6) as difference,
> round(sum( endbalance),6) as endbalance
> from trailbalance
> union
> Select
> '1',
> sum( round(beginBalance,6)) as beginbalance,
> sum( round(negative,6)) as debit,
> sum( round(positive,6)) as credit,
> sum( round(difference,6)) as difference,
> sum( round(endbalance,6)) as endbalance
> from trailbalance
>
> "1" -0.000006 -11250546.743752 11250546.743752 0.000000
> -0.000007
> "2" 0.000000 -11250546.743752 11250546.743752 0.000000
> 0.000000
>
> At the very least this show a clear warning when rounding do it after
> all the sum function is called not before.
>
IFAIK (dimly recalling numerical analysis courses at university) SUM and
ROUND can *never* be commuted. In general the recommended approach is to
round as late as possible and as few times are possible - so your 1st
query is the correct or best way to go.
Cheers
Mark
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2008-06-08 00:30:50 | Re: [HACKERS] TRUNCATE TABLE with IDENTITY |
Previous Message | Justin | 2008-06-07 22:38:54 | Re: math error or rounding problem Money type |