有人知道为什么使用sqlServer 2005
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)
给我11.74438969709659,
但是当我将分母上的小数位数增加到15时,我得到的答案不太准确:
SELECT CONVERT(DECIMAL(30,12499999.9999)
给我11.74438969
解决方法
对于乘法,我们只需在每个参数中加入小数位数(使用笔和纸)来计算输出分数.
但分裂只是把你的头分开.我现在要躺下.
在sql术语中,它是exactly as expected.
--Precision = p1 - s1 + s2 + max(6,s1 + p2 + 1) --Scale = max(6,s1 + p2 + 1) --Scale = 15 + 38 + 1 = 54 --Precision = 30 - 15 + 9 + 54 = 72 --Max P = 38,P & S are linked,so (72,54) -> (38,20) --So,we have 38,20 output (but we don use 20 d.p. for this sum) = 11.74438969709659 SELECT CONVERT(DECIMAL(30,12499999.9999) --Scale = 15 + 38 + 1 = 54 --Precision = 30 - 15 + 15 + 54 = 84 --Max P = 38,so (84,8) --So,8 output = 11.74438969 SELECT CONVERT(DECIMAL(30,12499999.9999)
如果您将每个数字对视为,您也可以按照this rule进行相同的数学计算
> 146804871.212533000000000和12499999.999900000> 146804871.212533000000000和12499999.999900000000000