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



我很难理解PostgreSQL中float(p)的精度参数p。例如,float(1)float(24)在我看来是完全一样的。

谁能给我举几个例子来说明他们的不同之处?

手册里有:

PostgreSQL还支持sql标准符号float和float(p)用于指定不精确的数字类型。这里,p表示最小值可接受的二进制精度。PostgreSQL接受float(1)到Float(24)选择实数类型,Float(25)选择Float (53)选择双精度。超出允许范围的p值绘制an错误。未指定精度的Float表示双精度精度。

然而,这里的关键是它指定了最小可接受的精度。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

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

实际上,它只是在那里支持标准语法,并被翻译成PostgreSQL的方言-通过选择适当的类型-在使用它的地方

最新更新