我真的只是在SQL Server 2008 R2中询问DECIMAL
(可能是NUMERIC
)类型。
MSDN说:
(标度) 可以存储在小数点右侧的最大小数位数。比例必须是从0到p的值。
我理解以下方式:
DECIMAL(10, 5)
- 我可以存储12345.12345或12345678.91。DECIMAL(5, 5)
- 我可以有12345或1234.5或1.2345等...... 是否清楚?
但我收到此错误消息:
SELECT CAST(2.8514 AS DECIMAL(5,5))
将数字转换为数据类型为数字的算术溢出错误。
我认为5,5表示我最多可以有5位数字,最多5位CAN小数点右边。
我试过:
SELECT CAST(12.851 AS DECIMAL(6,5)) - overflows too
然而
SELECT CAST(1.23456 AS DECIMAL(6,5)) - is OK.
那么真相是什么?
DECIMAL(a,b)
说我最多可以有一个数字,并且它们只有小数点(并且左边有a-b到dec。点)?
我真的很困惑,文档中的语句被复制到处。请花一点时间向我解释这个简单的事情。
非常感谢!
答案 0 :(得分:21)
最简单的思考方式(对我而言)是精度是总位数,其中标度是小数点右边的位数。因此,DECIMAL(p,s)
表示该点左侧的p-s
个数字,以及该点右侧的s
个数字。
这解释了您看到的所有转化错误:2.8514
不能decimal(5,5)
,因为p-s = 0
; 12.851
不能decimal(6,5)
,因为p-s = 1
等等。