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

Posted

技术标签:

【中文标题】PostgreSQL:float(1) 和 float(24) 有啥区别?【英文标题】:PostgreSQL: what is the difference between float(1) and float(24)?PostgreSQL:float(1) 和 float(24) 有什么区别? 【发布时间】:2013-05-29 03:35:22 【问题描述】:

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

谁能提供一些他们之间的差异的例子吗?

【问题讨论】:

【参考方案1】:

在the manual:

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

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

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

【讨论】:

表示float(1 ~ 24)对于PostgreSQL来说是一样的。浮点数(25 ~ 53)也是如此。我说的对吗? @DenLi 是的,你是对的。它们会酌情翻译成float4float8 感谢您的回答和示例。这正是我所要求的。 double pricisionfloat8 是一样的,对吧?

以上是关于PostgreSQL:float(1) 和 float(24) 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Python float() 函数

Python float() 函数

float和Float的区别

C语言中float是啥意思

float4数据类型

为啥使用 FloatBuffer 而不是 float[]?