I think this is not a bug.
abs(300 - 200)/200 is calculated as integer.
try:
gevik=# SELECT abs(300 - 200)/200::float*100 as bad, abs(300-200)*100/200 as
good;
bad | good
-----+------
50 | 50
(1 row)
------------------------------------------------
Gevik Babakhani
PostgreSQL NL http://www.postgresql.nl
TrueSoftware BV http://www.truesoftware.nl
------------------------------------------------
> -----Original Message-----
> From: pgsql-bugs-owner@postgresql.org
> [mailto:pgsql-bugs-owner@postgresql.org] On Behalf Of Michailas
> Sent: Friday, November 30, 2007 10:18 AM
> To: pgsql-bugs@postgresql.org
> Subject: [BUGS] BUG #3791: Bug in aritmethic calculations
>
>
> The following bug has been logged online:
>
> Bug reference: 3791
> Logged by: Michailas
> Email address: michailas.p@gmail.com
> PostgreSQL version: 8.2.4-2
> Operating system: Debian
> Description: Bug in aritmethic calculations
> Details:
>
> postgres=# SELECT abs(300 - 200)/200*100 as bad,
> abs(300-200)*100/200 as good;
>
> bad | good
> -----+------
> 0 | 50
> (1 row)
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 2: Don't 'kill -9' the postmaster
>