BUG #14026: Problem to convert number to real

Lists: pgsql-bugs
From: carlos_penteado(at)yahoo(dot)com(dot)br
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #14026: Problem to convert number to real
Date: 2016-03-16 20:07:06
Message-ID: 20160316200706.5227.26504@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 14026
Logged by: Carlos
Email address: carlos_penteado(at)yahoo(dot)com(dot)br
PostgreSQL version: 9.4.5
Operating system: windows
Description:

SELECT 109048.96::float, 0.96::float
RETURNS
109048.96;0.96
but
SELECT 109048.96::real, 0.96::real
RETURNS
109049;0.96


From: John R Pierce <pierce(at)hogranch(dot)com>
To: pgsql-bugs(at)postgresql(dot)org, carlos_penteado(at)yahoo(dot)com(dot)br
Subject: Re: BUG #14026: Problem to convert number to real
Date: 2016-03-17 23:18:52
Message-ID: 56EB3B5C.3020809@hogranch.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

On 3/16/2016 1:07 PM, carlos_penteado(at)yahoo(dot)com(dot)br wrote:
> SELECT 109048.96::float, 0.96::float
> RETURNS
> 109048.96;0.96
> but
> SELECT 109048.96::real, 0.96::real
> RETURNS
> 109049;0.96

float with unspecified precision is treated as double precision. real is
by definition single precision, which is only accurate to around 6 digits.

see http://www.postgresql.org/docs/current/static/datatype-numeric.html

--
john r pierce, recycling bits in santa cruz


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: carlos_penteado(at)yahoo(dot)com(dot)br
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #14026: Problem to convert number to real
Date: 2016-03-17 23:25:29
Message-ID: 16337.1458257129@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-bugs

carlos_penteado(at)yahoo(dot)com(dot)br writes:
> SELECT 109048.96::float, 0.96::float
> RETURNS
> 109048.96;0.96
> but
> SELECT 109048.96::real, 0.96::real
> RETURNS
> 109049;0.96

"float" means float8, while "real" means float4. Per
http://www.postgresql.org/docs/9.5/static/datatype-numeric.html#DATATYPE-FLOAT

PostgreSQL also supports the SQL-standard notations float and float(p)
for specifying inexact numeric types. Here, p specifies the minimum
acceptable precision in binary digits. PostgreSQL accepts float(1) to
float(24) as selecting the real type, while float(25) to float(53)
select double precision. Values of p outside the allowed range draw an
error. float with no precision specified is taken to mean double
precision.

regards, tom lane