一尘不染

用十进制除以十进制并得到零

sql

为什么当我这样做:

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))

我有价值吗?

我本来希望更高的精度除法返回更高的精度结果,为什么不是这种情况呢?


阅读 172

收藏
2021-03-08

共1个答案

一尘不染

发生这种情况的原因是,对于数学运算,使用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)

因此,当同时使用decimal(38/28)这两个部分时,您将以decimal(105,67)不支持的结尾而被截断。

也引用

结果精度和小数位的绝对最大值为38。当结果精度大于38时,相应的小数位会减小,以防止结果的整数部分被截断。

2021-03-08