2010-03-04 240 views
181

我在数据库中指定了以下列:decimal(5,2)如何解释数据库中数字的精度和比例?

如何解释?

根据在SQL Server Management Studio中查看的列上的属性,我可以看出它的含义:decimal(数字精度,数值范围)。

精度和标度在实际意义上的含义是什么?

这将是很容易解释为具有5位和两位小数的地方......一个十进制即12345.12

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

回答

300

数字精度是指数字中出现的最大数字位数。

即1234567.89具有9

数值尺度的精度是指小数

即123456.789的最大数目为3

分因此,对于小数(5最大允许值, 2)为999.99

+10

不要忘记,如果您使用的系统,让你预先定义的输入精度和标对于像Microsoft Access这样的百分比,您必须考虑百分比,因为它是整数形式。 在这种情况下,25.5%需要精度4和3(而不是1)的比例,因为我们必须将其视为.255。 我很早就遇到了这个问题,并被困了一段时间,想知道为什么scale 1不工作。 – 2013-12-05 21:54:44

+1

@mezoid负数值是什么意思? – Geek 2014-06-19 13:20:40

+0

@Geek根据http://technet.microsoft.com/en-us/library/ms187746.aspx规模不能小于零。 0 <=比例<=精度。从本质上来说,一个负面的价值观就没有意义。 – mezoid 2014-06-19 23:15:56

14

的SQL Server 2000文档读取Precision, Scale, and Length

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

60

数字的精度是位数。

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

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

实施例,与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)=> out of范围

注意,范围一般由精度定义:|value| < 10^p ...

+5

请注意,MS SQL Server将不允许12345或1234.56,因为“[scale]从[precision]减去以确定小数点左边的最大位数”。 (来源:[十进制和数字](http://technet.microsoft.com/en-us/library/ms187746.aspx)) – 2014-02-17 10:48:00

+0

'12345000'如何?精度5或8?如果5,用什么比例?比例-3? – towi 2015-03-05 14:11:58

+0

@towi这是什么意思?如果你想存储它,你会使用8,0。 – 2015-09-23 14:01:10