四舍五入与截断
ROUND、CEIL、FLOOR 和 TRUNC
四舍五入与截断 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。
为什么四舍五入很重要
在 SQL 中处理数字时,您经常会得到包含许多小数位的结果。例如,将 10 除以 3 会得到 3.3333333...
SQL 提供了用于控制显示或存储的小数位数的内置函数:ROUND、CEIL、FLOOR 和 TRUNC。这些函数对于呈现整洁的财务数据、测量值和统计数据至关重要。
SELECT 10.0 / 3.0 AS raw_result;ROUND:基本用法
ROUND() 函数会将数字四舍五入到指定的小数位数。它遵循标准的舍入规则:数字 5 及以上向上舍入,低于 5 的数字向下舍入。
语法为:ROUND(number, decimal_places)。如果省略第二个参数,则会舍入到最接近的整数。
SELECT
ROUND(3.14159, 2) AS two_decimals,
ROUND(3.14159, 0) AS zero_decimals,
ROUND(3.14159) AS no_arg;ROUND 与负小数位数
ROUND() 的一个不太为人所知的特性是,您可以将负数作为第二个参数传入。这会将舍入位置移到小数点左侧,适用于舍入到最接近的十位、百位或千位。
例如,ROUND(1567, -2) 会舍入到最接近的百位,结果为 1600。
SELECT
ROUND(1567.89, -1) AS nearest_ten,
ROUND(1567.89, -2) AS nearest_hundred,
ROUND(1567.89, -3) AS nearest_thousand;CEIL:始终向上舍入
CEIL()(在某些数据库中也写作 CEILING())始终将数字向上舍入到最接近的整数,无论小数部分是多少。
当您需要确保结果不会低于某个最小值时,这非常有用,例如计算显示一组结果所需的页数。
SELECT
CEIL(4.1) AS ceil_4_1,
CEIL(4.9) AS ceil_4_9,
CEIL(-4.1) AS ceil_neg_4_1,
CEIL(-4.9) AS ceil_neg_4_9;FLOOR:始终向下舍入
FLOOR() 始终将数字向下舍入到最接近的整数,无论小数部分是多少。
请注意,对于负数,FLOOR 会远离零舍入——FLOOR(-4.1) 的结果是 -5,而不是 -4。这与一些初学者的预期正好相反。
SELECT
FLOOR(4.9) AS floor_4_9,
FLOOR(4.1) AS floor_4_1,
FLOOR(-4.1) AS floor_neg_4_1,
FLOOR(-4.9) AS floor_neg_4_9;CEIL 与 FLOOR 对比
将 CEIL 和 FLOOR 放在一起比较,可以轻松理解它们的区别。CEIL 始终向上取到下一个整数,而 FLOOR 始终向下取整。
您可以把它想象成一栋建筑:FLOOR 是您下落时到达的地面,CEIL 是您上升时到达的天花板。
SELECT
2.3 AS original,
CEIL(2.3) AS ceil_result,
FLOOR(2.3) AS floor_result
UNION ALL
SELECT
7.8,
CEIL(7.8),
FLOOR(7.8);TRUNC:截断而不舍入
TRUNC()(在 MySQL 中为 TRUNCATE())会移除小数位,但不会进行任何舍入。它只会截去指定位置之后的数字。
这与 ROUND 不同——TRUNC(4.9) 的结果是 4,而不是 5。小数部分会直接被丢弃。
SELECT
TRUNC(4.9) AS trunc_4_9,
TRUNC(4.1) AS trunc_4_1,
TRUNC(-4.9) AS trunc_neg_4_9,
TRUNC(3.14159, 3) AS trunc_3_decimals;ROUND 与 TRUNC 的比较
ROUND 和 TRUNC 的关键区别在于:ROUND 会根据下一位数字改变值,而 TRUNC 始终丢弃截断点之后的所有内容,不作任何调整。
如果您想得到数学意义上最接近的值,请使用 ROUND。如果您想严格移除精度而不进行任何向上调整,请使用 TRUNC——这在不应多付款的财务计算中很常见。
SELECT
ROUND(2.567, 1) AS rounded,
TRUNC(2.567, 1) AS truncated;
-- ROUND gives 2.6 (5 rounds up)
-- TRUNC gives 2.5 (just cuts off)在实际表中使用 ROUND
将舍入函数应用于表列时,它们的作用最为强大。这里我们创建一个包含价格的简单 产品表,并使用 ROUND 将价格整洁地显示出来。
这种模式在电子商务和会计查询中非常常见,因为原始计算往往会产生许多小数位。
CREATE TABLE products (
name TEXT,
price NUMERIC
);
INSERT INTO products VALUES
('Widget', 9.999),
('Gadget', 24.3333),
('Doohickey', 4.5678);
SELECT name, ROUND(price, 2) AS display_price
FROM products;在查询中组合函数
您可以将舍入函数与其他 SQL 表达式结合使用。例如,先计算折后价格,再将其舍入以便显示。
该查询应用 15% 的折扣,将结果舍入到 2 位小数,同时还显示折后价格的 FLOOR 和 CEIL,从而得到最小和最大的整数价格。
SELECT
name,
price,
ROUND(price * 0.85, 2) AS discounted,
FLOOR(price * 0.85) AS min_price,
CEIL(price * 0.85) AS max_price
FROM products;使用 CEIL 进行分页
CEIL 的一个经典用途是计算分页系统中的总页数。如果有 97 行,每页显示 10 行,就需要 CEIL(97 / 10.0) = 10 页(而不是 9 页,因为最后一页有 7 行)。
请始终使用小数进行除法(10.0 而不是 10),以避免整数除法在 CEIL 运行前就丢弃余数。
SELECT
97 AS total_rows,
10 AS rows_per_page,
CEIL(97 / 10.0) AS total_pages;快速检查
检验您对 SQL 舍入函数的理解。
课程回顾
做得很好!下面总结 SQL 中的舍入和截断函数:
- ROUND(n, d) — 按标准数学规则舍入到 d 位小数(5 及以上向上舍入)。
- CEIL(n) — 始终向上舍入到最接近的整数。
- FLOOR(n) — 始终向下舍入到最接近的整数。
- TRUNC(n, d) — 移除 d 位置之后的数字而不进行舍入;不会增大数值。
使用 ROUND 进行显示和统计,使用 CEIL 计算最小容量(例如页数),使用 FLOOR 计算最多可容纳的数量,并在绝不能向上舍入时使用 TRUNC,尤其是在财务场景中。
常见问题解答
「四舍五入与截断」课时是免费的吗?
是的 — 「四舍五入与截断」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。
「四舍五入与截断」这节课中我会学到什么?
ROUND、CEIL、FLOOR 和 TRUNC 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 SQL Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「四舍五入与截断」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 SQL Academy 课中编写并运行代码吗?
能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。