BUG #3991: pgsql function sum()
The following bug has been logged online:
Bug reference: 3991
Logged by: mirek
Email address: mirek@mascort.com.pl
PostgreSQL version: 8.2.4
Operating system: Linux fedora(for work) and windows(for development)
Description: pgsql function sum()
Details:
I saw a very strange behavior when i used function SUM() in query (used
inside pg function), query:
select magazyn, ciag, numer, datawp, vat, sum(wnetto-wnettop) as wn,
sum(wvat-wvatp) as wv, sum(wbrutto-wbruttop) as wb from vzk_pozycjezinfo
where magazyn = $1 and ciag = $2 and numer = $3 and datawp = $4
group by magazyn, ciag, numer, datawp, vat
order by magazyn, ciag, numer, datawp, vat
vzk_pozycjezinfo is view
problem is in: sum(wvat-wvatp) where field in view wvat = 33.08 and wvatp =
36.09
Result is -3.01000000000001
If I ask postgres manualy: select sum(33.08 - 36.09)
result is ok -3.01
Now I fix it with round function but i think that is a bug.
With regards
Mirek
mirek napsal(a):
The following bug has been logged online:
Bug reference: 3991
Logged by: mirek
Email address: mirek@mascort.com.pl
PostgreSQL version: 8.2.4
Operating system: Linux fedora(for work) and windows(for development)
Description: pgsql function sum()
Details:I saw a very strange behavior when i used function SUM() in query (used
inside pg function), query:select magazyn, ciag, numer, datawp, vat, sum(wnetto-wnettop) as wn,
sum(wvat-wvatp) as wv, sum(wbrutto-wbruttop) as wb from vzk_pozycjezinfo
where magazyn = $1 and ciag = $2 and numer = $3 and datawp = $4
group by magazyn, ciag, numer, datawp, vat
order by magazyn, ciag, numer, datawp, vatvzk_pozycjezinfo is view
problem is in: sum(wvat-wvatp) where field in view wvat = 33.08 and wvatp =
36.09
Result is -3.01000000000001If I ask postgres manualy: select sum(33.08 - 36.09)
result is ok -3.01Now I fix it with round function but i think that is a bug.
How are wv and wb attribute defined? Are they number or flout/double?
Zdenek
"mirek" <mirek@mascort.com.pl> writes:
problem is in: sum(wvat-wvatp) where field in view wvat = 33.08 and wvatp =
36.09
Result is -3.01000000000001
If I ask postgres manualy: select sum(33.08 - 36.09)
result is ok -3.01
Now I fix it with round function but i think that is a bug.
You evidently haven't got much experience with working with
floating-point arithmetic.
regression=# select 33.08::numeric - 36.09::numeric;
?column?
----------
-3.01
(1 row)
regression=# select 33.08::float8 - 36.09::float8;
?column?
-------------------
-3.01000000000001
(1 row)
This is not a bug, it's an inherent consequence of the fact that these
decimal values are not exactly represented in a binary floating-point
system. If you don't like it, don't use float.
regards, tom lane
I think it is main problem. Try
select sum(cast(33.08 as float) - cast(36.09 as float));
you get
sum
-------------------
-3.01000000000001
Better is to use numeric type if you don't have reason to use
float/double. See
http://www.postgresql.org/docs/8.3/static/datatype-numeric.html#DATATYPE-FLOAT
It describes your problem.
Zdenek
Mirosław Marek napsal(a):
Show quoted text
wv and wb are defined as double precision
Mirek
Zdenek Kotala pisze:
mirek napsal(a):
The following bug has been logged online:
Bug reference: 3991
Logged by: mirek
Email address: mirek@mascort.com.pl
PostgreSQL version: 8.2.4
Operating system: Linux fedora(for work) and windows(for development)
Description: pgsql function sum()
Details:
I saw a very strange behavior when i used function SUM() in query (used
inside pg function), query:select magazyn, ciag, numer, datawp, vat, sum(wnetto-wnettop) as wn,
sum(wvat-wvatp) as wv, sum(wbrutto-wbruttop) as wb from vzk_pozycjezinfo
where magazyn = $1 and ciag = $2 and numer = $3 and datawp = $4
group by magazyn, ciag, numer, datawp, vat order by magazyn, ciag,
numer, datawp, vat
vzk_pozycjezinfo is viewproblem is in: sum(wvat-wvatp) where field in view wvat = 33.08 and
wvatp =
36.09 Result is -3.01000000000001
If I ask postgres manualy: select sum(33.08 - 36.09)
result is ok -3.01
Now I fix it with round function but i think that is a bug.How are wv and wb attribute defined? Are they number or flout/double?
Zdenek
__________ NOD32 Informacje 2903 (20080226) __________
Wiadomosc zostala sprawdzona przez System Antywirusowy NOD32
http://www.nod32.com lub http://www.nod32.pl
Import Notes
Reply to msg id not found: 47C42E7F.2080506@mascort.com.pl