Обсуждение: BUG #14026: Problem to convert number to real

Поиск
Список
Период
Сортировка

BUG #14026: Problem to convert number to real

От
carlos_penteado@yahoo.com.br
Дата:
The following bug has been logged on the website:

Bug reference:      14026
Logged by:          Carlos
Email address:      carlos_penteado@yahoo.com.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

Re: BUG #14026: Problem to convert number to real

От
John R Pierce
Дата:
On 3/16/2016 1:07 PM, carlos_penteado@yahoo.com.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

Re: BUG #14026: Problem to convert number to real

От
Tom Lane
Дата:
carlos_penteado@yahoo.com.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