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

SQL Server: round a percentage to nearest whole number

我看了这里的一些答案,但还是卡住了。我是一个全新的初学者。

我有一个简单的select语句

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

returns一栏

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,但每次都以错误告终。如有必要,我可以 post 错误,但我猜这应该很简单,我在 SO 上看到的其他问题中遗漏了一些格式或类似内容。

如果我这样做:

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

我有很多小数位。

如果我这样做:

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

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

您可以使用 SELECT CEILING(66.666666666666) 从您的陈述中得出 67:

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

结合使用 cast 和 round 怎么样?四舍五入后转为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。

您可以按照下面的方式进行。 首先,对结果进行舍入,然后将其转换为 int。它会自动删除右边的零

select convert(int,round((100.0*(CURRENRL)/(CAPACITY)) ,0)) AS "OCCUPANCY RATE"
FROM COURSE, LOCATION
WHERE LOCATION.LOCID=COURSE.LOCID