首页/数据/SQL 速查/CEIL / FLOOR 向上向下取整
函数速查60 条

CEIL / FLOOR 向上向下取整

向正负方向取整:CEIL 向上(天花板)、FLOOR 向下(地板);分页总页数、资源规格向上取整等场景常用。

SQL 速查数据更新于 2026-10-13

取整函数是什么

CEIL 向数轴正方向取整(天花板),FLOOR 向负方向取整(地板),两者在负数上的表现最容易被误判。CEILING 与 CEIL 等价,MySQL 与 PostgreSQL 都支持。分页总页数、资源规格向上取整是最常见的两个使用场景。

基本信息

CEIL(x)不小于 x 的最小整数,别名 CEILING
FLOOR(x)不大于 x 的最大整数
负数CEIL(-1.5) 得 -1,FLOOR(-1.5) 得 -2,按数轴方向取整
返回类型PostgreSQL 保留 numeric 等类型;MySQL 视参数类型返回整数或小数
典型用途总页数、并发规格、按整箱整柜折算数量
与 ROUND 区别ROUND 是四舍五入,方向取决于数值大小

基础用法

基础用法
SELECT CEIL(1.2), FLOOR(1.8);     -- 2, 1
SELECT CEIL(-1.5), FLOOR(-1.5);   -- -1, -2:按数轴方向取整

-- 分页总页数:向上取整,除法先保证是小数
SELECT CEIL(COUNT(*) / 20.0) AS pages FROM orders;

-- 按整箱折算:不足一箱也算一箱
SELECT CEIL(qty / 12.0) AS boxes FROM order_items;

与截断的区别

与截断的区别
-- TRUNCATE 是向零截断,与 FLOOR、CEIL 都不等价
SELECT TRUNCATE(1.9, 0), TRUNCATE(-1.9, 0);   -- 1, -1:都朝零靠

-- PostgreSQL 里这个函数叫 trunc
SELECT trunc(1.9), trunc(-1.9);                -- 1, -1

-- 想保留小数位时用 trunc 的第二参数
SELECT trunc(3.14159, 2);                      -- 3.14

取整方式对比

函数1.5-1.5取整方向
CEIL2-1向正无穷
FLOOR1-2向负无穷
ROUND2-2四舍五入
TRUNCATE / trunc1-1向零靠
CAST 为整数2-2MySQL 会舍入,不要当截断用
负数分页场景——页数必须是非负数,先保证计数不为负

典型使用场景

  • 分页:向上取整算出总页数
  • 资源规格:申请内存、CPU 按固定档位向上取整
  • 计价:不足一个计费单位按一个算
  • 分箱装箱:按整箱数量向上取整
  • 图表分桶:把指标按固定步长向下取整成桶
  • 时间对齐:把秒数按 5 分钟步长向下对齐
  • 批次切分:按每批固定条数向上取整,预估需要跑多少批
  • 容量估算:把字节数向上取整换算成 MB 或 GB 展示
跨库做整数除法要小心:PostgreSQL 里 CEIL(5/2) 会先算整数除法得 2,再取整仍是 2;MySQL 的 5/2 得到 2.5,CEIL 之后是 3。想要小数结果就先乘 1.0 或显式转 numeric。
CEIL 与 FLOOR 常和分组配合做分桶:把数值除以步长再向下取整再乘回步长,就能得到以步长为宽度的区间起点,例如按 100 一档统计订单金额分布。
负数区间里把 FLOOR 当“取小”用容易与业务直觉相反:温度、盈亏这类可能为负的指标,取整前先明确需求是向数轴取整还是取绝对值再取整。

易错点

  • 以为 FLOOR 就是去掉小数:负数上 FLOOR(-1.5) 得 -2,要朝零截断请用 TRUNCATE
  • 整数除法之后再取整:PostgreSQL 的 5/2 先截断成 2,CEIL 也救不回来,先转 numeric
  • 用 CAST 转整数当截断用:MySQL 会做舍入,需要截断时请用 TRUNCATE 或 FLOOR
  • 分页总页数算错:整除时会多出一页,确保除法带小数再 CEIL
  • 分桶时漏乘回步长:除以步长取整得到的是桶序号,直接展示会少一个数量级

数据来源与参考

  • MySQL 8.0 Reference Manual · Mathematical Functions
  • PostgreSQL Documentation · Mathematical Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌