我在SQL Server 2012中运行了以下内容
SELECT CONVERT(DECIMAL(7,2),4)/CONVERT(DECIMAL (7,2),3)
并得到以下内容。
1.3333333333
我相信DECIMAL
将7视为精度,将2视为比例,所以我不应该将结果视为2位小数?
答案 0 :(得分:1)
您还需要将结果转换为DECIMAL(7,2)。例如:
SELECT CONVERT(DECIMAL(7,2), CONVERT(DECIMAL(7,2),4)/CONVERT(DECIMAL (7,2),3))
这会给你:
1.33
答案 1 :(得分:1)
根据MSDN,当您划分e1/e2
和decimal(p1, s1)
的{{1}}时,
结果精度是
decimal(p2, s2)
结果规模是
p1 - s1 + s2 + max(6, s1 + p2 + 1)
所以你得到精确度max(6, s1 + p2 + 1)
= 13
并且缩放7 - 2 + 2 + max(6, 2 + 2 + 1)
= 10
获得max(6, 2 + 7 + 1)
这样做的原因是,如果不根据操作数扩展精度和比例,则会失去准确性:查看.5 / 2 = .25并与.5 / 20 = .025进行比较。如果您使用decimal(13, 10)
类型,您可能迟早会遇到这种情况,因为它有一个固定的四位数“比例”。例如:https://stackoverflow.com/a/582819/155892