如何解释数据库中数字的精度和小数位数?

问题描述 投票:0回答:5

我在数据库中指定了以下列:decimal(5,2)

如何解释这一点?

根据 SQL Server Management studio 中查看的列属性,我可以看到它的含义:小数(数字精度,数字小数位数)。

精度和规模的实际含义是什么?

很容易将其解释为具有 5 位数字和两位小数的小数......即 12345.12

附注我已经能够从一位同事那里确定正确的答案,但在网上找到答案却遇到了很大的困难。因此,我希望将问题和答案记录在 stackoverflow 上以供将来参考。

sql database decimal scale precision
5个回答
506
投票

数字精度是指数字中存在的最大位数。

即 1234567.89 的精度为 9

数字刻度是指最大小数位数

即 123456.789 的标度为 3

因此,decimal(5,2) 的最大允许值为 999.99


115
投票

数字的精度是位数。

数字的小数位数是小数点后的位数。

在字段定义上设置精度和比例时通常意味着它们代表最大值。

例如,使用

precision=5
scale=2
定义的小数字段将允许使用以下值:

  • 123.45
    (p=5,s=2)
  • 12.34
    (p=4,s=2)
  • 12345
    (p=5,s=0)
  • 123.4
    (p=4,s=1)
  • 0
    (p=0,s=0)

以下值是不允许的,否则会导致数据丢失:

  • 12.345
    (p=5,s=3) => 可以截断为
    12.35
    (p=4,s=2)
  • 1234.56
    (p=6,s=2) => 可以截断为
    1234.6
    (p=5,s=1)
  • 123.456
    (p=6,s=3) => 可以截断为
    123.46
    (p=5,s=2)
  • 123450
    (p=6,s=0) => 超出范围

请注意,范围通常由精度定义:

|value| < 10^p
...


37
投票
SQL Server 2000 文档中的

精度、比例和长度内容如下:

精度是数字中的位数。小数位数是数字中小数点右侧的位数。例如,数字 123.45 的精度为 5,小数位数为 2。


1
投票

精度是指总位数,小数位数是指小数点后允许的位数。 引用的示例的精度为 7,小数位数为 2。

此外,DECIMAL(精度,小数位数)是一种精确值数据类型,与存储近似数值数据的 FLOAT(精度,小数位数)等类型不同。 例如,定义为 FLOAT(7,4) 的列显示为 -999.9999。 MySQL 在存储值时会进行舍入,因此如果将 999.00009 插入 FLOAT(7,4) 列,则近似结果为 999.0001。

如果有帮助请告诉我!


0
投票

在 ms Sql 服务器中,我的类型为十进制 10.8,为什么我不能指定大于 99.9 的值,例如 100.0

出现错误:

算术溢出

对于十进制类型 10.4,我可以指定数字 999999.0 你能给我解释一下为什么会这样吗?

© www.soinside.com 2019 - 2024. All rights reserved.