除法时精度值不匹配

时间:2019-04-02 15:00:22

标签: tsql

SELECT(1663356.000000000000000/133920.000000)

它给出如下输出:12.4205197132616487455197132

但是当我使用精度为(38,15)的Temp表执行相同的操作时,输出值比例仅为9。我不知道为什么会这样吗?

示例:

create table #Temp
(
  a numeric(38,15),
  b numeric(22,6)
)

insert into #BASELINE values (1663356.000000000000000,133920.000000)

select a/b from #BASELINE

我得到的输出如下:12.420519713

1 个答案:

答案 0 :(得分:0)

所以我认为计算是这样的:

p1 = 38
s1 = 15
p2 = 22
s2 = 6
result precision = 38 - 15 + 6 + MAX(6, 15 + 22 + 1) = 67
result scale = MAX(6, 15 + 22 + 1) = 38 

但是此规则开始了:“结果精度和小数位数的绝对最大值为38。当结果精度大于38时,将减小相应的小数位数,以防止结果的整数部分被截断。”

因此,“真实”比例为38 - (67 - 38) = 9,与您的发现相符。