SQL Server:将百分比四舍五入到最接近的整数

时间:2017-12-03 21:29:00

标签: sql-server rounding percentage

我在这里看了一些答案,但我一直陷入困境。我是一个全新的初学者。

我有一个简单的选择语句

SELECT (100.0*(CURRENRL)/(CAPACITY)) AS "OCCUPANCY RATE"
FROM COURSE, LOCATION
WHERE LOCATION.LOCID=COURSE.LOCID

返回一列

90.000000000000
100.000000000000
80.000000000000
100.000000000000
100.000000000000
59.523809523809
66.666666666666
28.571428571428
76.190476190476
83.333333333333
23.333333333333

我只是想绕到最接近的整数。

这样我输出如下:

90
100
80
100
100
60
67
...

我尝试过使用ROUND和CAST,但每次都会出错。如果有必要,我可以发布错误,但我的猜测是这应该很简单,而且我错过了一些格式或类似于我在这里看到的其他问题。

如果我这样做:

ROUND(100.0*(CURRENRL)/(CAPACITY), 0) AS "OCCUPANCY RATE"

我得到了很多小数位。

如果我这样做:

ROUND(100*(CURRENRL)/(CAPACITY), 0) AS "OCCUPANCY RATE"

我得到一个很好的整数,但它似乎没有正确舍入。例如,对于第6个数字,我得到59而不是60,而对于第7个数字,我得到66而不是67,等等。

2 个答案:

答案 0 :(得分:3)

使用演员和圆形组合怎么样?四舍五入后,将其切换为INT以获得整数。

SELECT **CAST(** _ROUND(100.0*(CURRENRL)/(CAPACITY)), 0)_ **AS INT)** AS "OCCUPANCY RATE"
FROM COURSE, LOCATION
WHERE LOCATION.LOCID=COURSE.LOCID

但也使用天花板测试了E Alexis T的编辑答案,它也给出了您想要的答案。它比我的答案在短代码方面要好得多:)它应该是你的选择。它只有一个低于5的舍入缺陷。例如123.39仍然是124。

答案 1 :(得分:2)

您可以使用SELECT CEILING(66.666666666666)给出67,来自您的陈述:

SELECT CEILING(100*(CURRENRL)/(CAPACITY)) AS "OCCUPANCY RATE"
FROM COURSE, LOCATION
WHERE LOCATION.LOCID=COURSE.LOCID