PostgreSQL:float(1)和float(24)之间有什么区别?

Xin*_*Xin 5 postgresql floating-point precision sqldatatypes floating-point-precision

我很难理解float(p)PostgreSQL中的精度参数p .例如,float(1)并且float(24)似乎是完全一样的我.

有谁可以向我提供一些他们的差异的例子,好吗?

Cra*_*ger 18

它在手册中:

PostgreSQL还支持SQL标准符号float和float(p)来指定不精确的数字类型.这里,p指定二进制数字的最小可接受精度.PostgreSQL接受float(1)到float(24)选择真实类型,而float(25)到float(53)选择双精度.超出允许范围的p值会产生错误.未指定精度的浮点数表示双精度.

但是,这里的关键是它指定了可接受的最低精度.PostgreSQL使用它来选择满足要求的基础数据类型(float4float8).

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
Run Code Online (Sandbox Code Playgroud)

您可以使用pg_typeof确认类型选择.

实际上它只是支持标准语法,并通过选择适当的类型转换成PostgreSQL的方言 - 使用它.

  • 这意味着float(1〜24)对于PostgreSQL是相同的。浮点数(25〜53)也是如此。我对么? (2认同)
  • 并且“double pricision”和“float8”是相同的,对吧? (2认同)