为什么当我这样做:
select CAST(1 AS DECIMAL(38, 28))/CAST(1625625 AS DECIMAL(38, 28))
我得到0,但是当我得到
select CAST(1 AS DECIMAL(20, 10))/CAST(1625625 AS DECIMAL(20, 10))
我有价值吗?
我本来希望更高的精度除法返回更高的精度结果,为什么不是这种情况呢?
发生这种情况的原因是,对于数学运算,使用http://msdn.microsoft.com/zh- cn/library/ms190476.aspx#division中找到的规则来计算得出的精度和小数位数
操作 e1 / e2 结果精度 p1-s1 + s2 + max(6,s1 + p2 + 1) 结果标度 max(6,s1 + p2 + 1)
操作 e1 / e2
结果精度 p1-s1 + s2 + max(6,s1 + p2 + 1)
结果标度 max(6,s1 + p2 + 1)
因此,当同时使用decimal(38/28)这两个部分时,您将以decimal(105,67)不支持的结尾而被截断。
decimal(38/28)
decimal(105,67)
也引用
结果精度和小数位的绝对最大值为38。当结果精度大于38时,相应的小数位会减小,以防止结果的整数部分被截断。