7

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

谁能给我一些他们不同的例子,好吗?

4

1 回答 1

23

它在手册中:

PostgreSQL 还支持 SQL 标准表示法 float 和 float(p) 用于指定不精确的数字类型。这里,p 指定二进制数字的最小可接受精度。PostgreSQL 接受 float(1) 到 float(24) 作为选择真实类型,而 float(25) 到 float(53) 选择双精度。超出允许范围的 p 值会产生错误。没有指定精度的浮点数被认为是双精度。

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

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 的方言——通过选择适当的类型——在它被使用的地方。

于 2013-06-03T02:11:44.553 回答