276

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

如何解释这一点?

根据在 SQL Server Management Studio 中查看的列上的属性,我可以看到它的意思是:十进制(数字精度,数字刻度)。

精度和规模在实际中意味着什么?

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

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

4

4 回答 4

457

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

即 1234567.89 的精度为 9

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

即 123456.789 的比例为 3

因此,十进制(5,2)的最大允许值为 999.99

于 2010-03-04T05:54:13.770 回答
107

数字的精度是位数。

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

在字段定义上设置精度和比例时通常暗示的是它们代表最大值

precision=5例如,使用and定义的十进制字段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...

于 2013-03-20T10:14:32.543 回答
36

SQL Server 2000 文档中的精度、比例和长度如下:

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

于 2012-11-20T08:25:17.920 回答
0

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

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

让我知道这是否有帮助!

于 2022-01-07T14:44:24.137 回答