SQL Server 2012整数分区小数位

时间:2015-04-01 23:50:41

标签: sql-server

我在SQL Server 2012中运行了以下内容

SELECT CONVERT(DECIMAL(7,2),4)/CONVERT(DECIMAL (7,2),3)

并得到以下内容。

1.3333333333

我相信DECIMAL将7视为精度,将2视为比例,所以我不应该将结果视为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/e2decimal(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

https://msdn.microsoft.com/en-us/library/ms190476.aspx