Округление и усечение
ROUND, CEIL, FLOOR и TRUNC
«Округление и усечение» — бесплатный урок SQL Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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() (или TRUNCATE() в MySQL) удаляет знаки после запятой без какого-либо округления. Она просто отбрасывает цифры после указанной позиции.
Это отличается от 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 — когда нельзя допустить округление вверх, особенно в финансовых расчётах.
Часто задаваемые вопросы
Урок «Округление и усечение» бесплатный?
Да — полный текст урока «Округление и усечение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Округление и усечение»?
ROUND, CEIL, FLOOR и TRUNC Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Округление и усечение»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Арифметика и операторы
- Округление и усечение
- Целочисленное и десятичное деление
- Полезные математические функции