管理杂谈OA答疑ERP答疑教程搜索

SQL Server取整函数完全指南:ROUND、CEILING、FLOOR怎么用?


数值取整别再傻傻分不清,一篇文章帮你彻底搞懂

大家好。今天来聊聊SQL Server中的取整函数——ROUND、CEILING、FLOOR。它们在数据统计、金额计算、分页等场景中经常用到,搞清楚了能避免很多坑。

一、整数除法陷阱(最常踩的坑)

-- 两个整数相除,结果会自动截断小数部分SELECT 3/4 AS 结果14/3 AS 结果25/3 AS 结果3-- 结果:0, 1, 1


原因:整数除法返回整数,直接舍弃小数(不是四舍五入)。

解决方案:先转换为小数再除

SELECT 3*1.0/4   -- 0.750000SELECT CAST(3 AS DECIMAL(10,2))/4  -- 0.750000


二、三个核心取整函数

函数
功能
示例
结果
CEILING
向上取整(天花板)
CEILING(123.45)
124
FLOOR
向下取整(地板)
FLOOR(123.45)
123
ROUND
四舍五入到指定位数
ROUND(123.45, 1)
123.50

三、CEILING:向上取整

返回大于或等于指定数字的最小整数。

SELECT     CEILING(123.55AS 正数,    CEILING(123.45AS 正数2,    CEILING(-123.45AS 负数,    CEILING(0.0AS 零-- 结果:124, 124, -123, 0


参数说明

四舍五入并转为整数

SELECT     CAST(ROUND(56.3610) AS INT) AS 结果1,  -- 56    CAST(ROUND(56.5610) AS INT) AS 结果2   -- 57


五、实际应用场景

场景1:分页计算(向上取整)

-- 计算总页数:总记录数100,每页30条,需要多少页?DECLARE @total INT = 100@pageSize INT = 30SELECT CEILING(@total * 1.0 / @pageSizeAS 总页数-- 结果:4页


场景2:金额四舍五入到分

-- 计算折扣后金额,保留2位小数DECLARE @price DECIMAL(10,4= 99.99@discount DECIMAL(3,2= 0.7SELECT ROUND(@price * @discount2AS 折后金额-- 结果:69.99


场景3:整数除法(向上取整 vs 四舍五入)

DECLARE @dividend DECIMAL(20,2), @divisor DECIMAL(20,2)-- 向上取整SET @dividend=3SET @divisor=4SELECT CEILING(@dividend/@divisorAS 向上取整  -- 1SET @dividend=4SET @divisor=3SELECT CEILING(@dividend/@divisorAS 向上取整  -- 2SET @dividend=5SET @divisor=3SELECT CEILING(@dividend/@divisorAS 向上取整  -- 2-- 四舍五入取整SET @dividend=3SET @divisor=4SELECT CAST(ROUND(@dividend/@divisor0AS INTAS 四舍五入  -- 1SET @dividend=4SET @divisor=3SELECT CAST(ROUND(@dividend/@divisor0AS INTAS 四舍五入  -- 1SET @dividend=5SET @divisor=3SELECT CAST(ROUND(@dividend/@divisor0AS INTAS 四舍五入  -- 2

关键区别

六、其他相关函数

-- FLOOR:向下取整SELECT FLOOR(123.99)   -- 123SELECT FLOOR(-123.45)  -- -124-- 直接截断小数(不四舍五入)SELECT CAST(123.99 AS INT)   -- 123-- 绝对值SELECT ABS(-123.45)   -- 123.45

七、快速对照表

输入值
CEILING
FLOOR
ROUND(,0)
CAST(AS INT)
3.2
4
3
3
3
3.6
4
3
4
3
-3.2
-3
-4
-3
-3
-3.6
-3
-4
-4
-3
3/4
1
0
1
0

八、常见问题

Q:为什么3/4等于0?
 A:整数除法截断小数,改成3*1.0/4CAST(3 AS DECIMAL)/4

Q:CEILING和ROUND有什么区别?
 A:CEILING(1.1)=2(直接向上),ROUND(1.1,0)=1(四舍五入)。

Q:如何保留两位小数但不四舍五入?
 A:用FLOOR(数值 * 100) / 100

九、总结

需求
推荐函数
整数除法不丢精度
先转DECIMAL再除
计算总页数
CEILING(总数*1.0/页大小)
金额四舍五入
ROUND(金额, 2)
向下取整
FLOOR(数值)
去掉小数(直接截断)
CAST(数值 AS INT)

一句话:向上取整用CEILING,四舍五入用ROUND,整数除法记得转小数!

阅读原文:原文链接


更多精彩文章浏览...
点击右上角图标分享到朋友圈
官方网站:http://www.clicksun.cn
咨询热线:400-186-1886
服务邮箱:service@clicksun.cn