Postgres 中数字数据类型的精度和小数位数是多少?

Posted

技术标签:

【中文标题】Postgres 中数字数据类型的精度和小数位数是多少?【英文标题】:What are precision and scale for numeric data types in Postgres? 【发布时间】:2020-09-09 21:14:36 【问题描述】:

文档没有示例。

https://www.postgresql.org/docs/10/datatype-numeric.html#DATATYPE-NUMERIC-TABLE

NUMERIC(精度、比例)

我想使用最小的空间来保存一个最多为 100 的正数,并且我需要接受 0.5 的小数增量

在这种情况下我应该使用什么精度和比例?

【问题讨论】:

【参考方案1】:

使用numeric(4, 1)

这为您提供最多 4 位数字(包括小数部分),为小数保留 1 位数字,因此这将存储数字直到 999.9

如果您可以接受不大于99.9 的数字,那么numeric(3, 1) 就可以了。

【讨论】:

谢谢!所以精度是位数,比例是小数位数。 @ZachG:是的,完全正确。【参考方案2】:

NUMERIC(4,1) 可以,但这也可以接受小数,例如:

55.0
26.3
978.1

这是因为精度声明了一个数字可以容纳的最大位数,并且比例与小数部分有关。您还需要验证您的输入。

如果您希望在数据库级别执行此操作,您可以使用CHECK column_name <= 100.0。这种检查也可以扩展到只接受带有.0.5 小数部分的数字(参见模运算符)。

【讨论】:

以上是关于Postgres 中数字数据类型的精度和小数位数是多少?的主要内容,如果未能解决你的问题,请参考以下文章

C 语言中双精度浮点型精度怎样保留位数

精度浮点型数据精确到了几位小数呢?

ORACLE 中NUMBER类型默认的精度和Scale问题

Oracle NUMBER 数据类型中的精度和小数位数是啥意思

单精度、双精度各有几位小数?

ACCESS,货币数据类型等价于具有啥属性的数据数字类型?