如何解释数据库中数字的精度和比例?

时间:2010-03-04 05:54:01

标签: sql database decimal scale precision

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

如何理解这一点?

根据SQL Server Management Studio中查看的列上的属性,我可以看到它表示:decimal(数字精度,数字刻度)。

精确度和尺度在实际意义上是什么意思?

很容易将其解释为带有5位数和2位小数位的小数......即12345.12

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

3 个答案:

答案 0 :(得分:348)

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

即1234567.89的精度为9

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

即123456.789的等级为3

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

答案 1 :(得分:74)

数字的精确度是位数。

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

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

示例,使用precision=5scale=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 ...

答案 2 :(得分:21)

SQL Server 2000文档中的

Precision, Scale, and Length读取:

  

精确度是数字中的位数。 Scale是数字中小数点右边的位数。例如,数字123.45的精度为5,标度为2。