将整数除法转换为十进制的更简洁方法

时间:2012-04-24 19:58:23

标签: sql sql-server-2008 casting

我试图将一些整数除以得到一个百分比。默认情况下,我得到一个整数结果,当然,所以我转换为十进制。但我也希望结果只有小数点右边的两个位置。

--select (x - y) / y

select (82 - 56) / 56                                      --0
select (82 - 56) / cast(56 as decimal(9, 2))               --0.4642857142
select cast(82 - 56 as decimal(9,2)) / 56                  --0.464285
select cast((82 - 56) / 56 as decimal(9,2))                --0.00

select cast(cast(82 - 56 as decimal) / 56 as decimal(9,2)) --.46

所以我最终必须同时转换其中一个操作数和整个表达式以获得我想要的结果。有一个更好的方法吗?

注意我把方程式放在首位表示我显然没有使用硬编码的数字(即建议我只是在数字不太有用之后加上“.0”)。此外,我通常会将格式化方面留给报告软件,但这会被不时复制到Excel电子表格中,我每次都必须手工格式化。

1 个答案:

答案 0 :(得分:3)

DECIMAL除以INTEGER时,SQL Server会产生DECIMAL,精度定义为p1 - s1 + s2 + max(6,s1 + p2 + 1) ),其中snpn是第一和第二个参数(divide和divisor)的比例和精度。

最简单的方法是:

SELECT  CAST(1. * (x - y) / y AS DECIMAL(9, 2))

1.是一个DECIMAL(1, 0),乘以一个整数,产生一个DECIMAL(n, 0)。除以整数,它将产生DECIMAL(n, 6)(对于与您的示例中的数字类似的数字顺序)。

然后需要强制转换为DECIMAL(9, 2)以截断额外的数字。