0Pricing
SQL Academy · 课时

四舍五入与截断

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 算术与运算符
  2. 四舍五入与截断
  3. 整数除法与小数除法
  4. 实用数学函数
← 返回 SQL Academy