有谁知道为什么,使用SQLServer 2005
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)
给我11.74438969709659
但是,当我将分母的小数位数增加到15时,我得到的答案不太准确:
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,15),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,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)
--Scale = 15 + 38 + 1 = 54
--Precision = 30 - 15 + 15 + 54 = 84
--Max P = 38, P & S are linked, so (84,54) -> (38,8)
--So, we have 38,8 output = 11.74438969
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,15),12499999.9999)
如果您也遵循this rule,也可以进行相同的数学运算,如果您将每个数字对都视为
关于tsql - T-SQL十进制除法精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/423925/