Thread: BUG #3959: Huge calculation error
The following bug has been logged online: Bug reference: 3959 Logged by: Renaud Diez Email address: rdiez@salesprize.com PostgreSQL version: 8.2 Operating system: Debian Description: Huge calculation error Details: the basic mathematical expression like the following one doesn't compute the correct result: > select 100*(1+(21/100)); return a result of 100 instead of 121.
Renaud Diez wrote: > The following bug has been logged online: > > Bug reference: 3959 > Logged by: Renaud Diez > Email address: rdiez@salesprize.com > PostgreSQL version: 8.2 > Operating system: Debian > Description: Huge calculation error > Details: > > the basic mathematical expression like the following one doesn't compute the > correct result: > >> select 100*(1+(21/100)); > > return a result of 100 instead of 121. It does compute the correct result, because you're doing integer calculations. 21/100 for integers is 0. To make it do float calc, you can do select 100*(1+(21::float/100)); Or you can do select 100*(1+(21.0/100)); which will force it to numeric. //Magnus
Renaud Diez wrote: > The following bug has been logged online: > > Bug reference: 3959 > Logged by: Renaud Diez > Email address: rdiez@salesprize.com > PostgreSQL version: 8.2 > Operating system: Debian > Description: Huge calculation error > Details: > > the basic mathematical expression like the following one doesn't compute the > correct result: > >> select 100*(1+(21/100)); > > return a result of 100 instead of 121. That's because 21/100 = 0, in integer math. Try "SELECT 100*(1+(21/100.0))" to use floating points. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
Renaud Diez wrote: > The following bug has been logged online: > > Bug reference: 3959 > Logged by: Renaud Diez > Email address: rdiez@salesprize.com > PostgreSQL version: 8.2 > Operating system: Debian > Description: Huge calculation error > Details: > > the basic mathematical expression like the following one doesn't compute the > correct result: > > >> select 100*(1+(21/100)); >> > > return a result of 100 instead of 121. > > ---------------------------(end of broadcast)--------------------------- > TIP 6: explain analyze is your friend > > Hola, en realidad no lo hace mal, no es lo que esprabas, lo que en realidad necesitas es esto: select 100*(1+(21.0/100))::float; saludos Fernando