Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PostgreSQL: what is the difference between float(1) and float(24)?

I am having a hard time understanding the precision parameter p for float(p) in PostgreSQL. For example, float(1) and float(24) seem to be exactly the same to me.

Can anyone provide me with some examples of their differences, please?

like image 767
Xin Avatar asked Jun 03 '13 01:06

Xin


1 Answers

It's in the manual:

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.

However, the key thing here is that it specifies the minimum acceptable precision. PostgreSQL uses this to select the underlying data type (float4 or float8) that meets the requirement.

regress=> \x
Expanded display is on.
regress=> SELECT
        '1.123456789123456789'::float,
        '1.123456789123456789'::double precision,
        '1.123456789123456789'::float(1),
        '1.123456789123456789'::float(2),
        '1.123456789123456789'::float(24),                                                                                                                                     
        '1.123456789123456789'::float(48);                                                                                                                                     
-[ RECORD 1 ]------------                                                                                                                                                      
float8 | 1.12345678912346
float8 | 1.12345678912346
float4 | 1.12346
float4 | 1.12346
float4 | 1.12346
float8 | 1.12345678912346

You can use pg_typeof to confirm the type selections.

Effectively it's just there to support the standard syntax and gets translated into PostgreSQL's dialect - through selection of appropriate types - where it's used.

like image 58
Craig Ringer Avatar answered Nov 11 '22 14:11

Craig Ringer