0

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

--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 电子表格中,我每次都必须手动格式化。

4

1 回答 1

3

当 a 除以DECIMALanINTEGER时,SQL Server得到 a DECIMAL,精度定义为 p1 - s1 + s2 + max(6, s1 + p2 + 1),其中snpn是第一个和第二个参数(除数和除数)的比例和精度.

最简单的方法是:

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

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

然后需要将其转换DECIMAL(9, 2)为截断多余的数字。

于 2012-04-24T20:14:35.637 回答