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

时间:2013-06-03 01:47:02

标签: postgresql floating-point precision sqldatatypes floating-point-precision

我很难理解PostgreSQL中float(p)的精度参数p。例如,float(1)float(24)似乎与我完全相同。

有人可以向我提供一些差异的例子吗?

1 个答案:

答案 0 :(得分:16)

它位于the manual

  

PostgreSQL还支持SQL标准符号float和float(p)   用于指定不精确的数字类型。这里,p指定最小值   二进制数字的可接受精度。 PostgreSQL接受float(1)   float(24)选择实际类型,float(25)浮动(53)   选择双精度。 p在允许范围之外的值绘制a   错误。没有指定精度的float被认为是double   精度。

但是,这里的关键是它指定最小可接受的精度。 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的方言 - 使用它。