Обсуждение: BUG #14026: Problem to convert number to real
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
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
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