Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Функции округления

ceil

Добавленный в: v1.1.0

Как и floor, но возвращает наименьшее округлённое число, большее или равное x. Если округление приводит к переполнению (например, ceiling(255, -1)), результат не определён.

Синтаксис

ceiling(x[, N])

Псевдонимы: ceiling

Аргументы

  • x — Значение, которое нужно округлить. Float* или Decimal* или (U)Int*
  • N — Необязательно. Количество знаков после запятой, до которого нужно округлить. По умолчанию — ноль, то есть округление до целого числа. Может быть отрицательным. (U)Int*

Возвращаемое значение

Округлённое число того же типа, что и x. Float* или Decimal* или (U)Int*

Примеры

Базовое использование

SELECT ceiling(123.45, 1) AS rounded
┌─rounded─┐
│   123.5 │
└─────────┘

Отрицательное значение точности

SELECT ceiling(123.45, -1)
┌─ceiling(123.45, -1)─┐
│                 130 │
└─────────────────────┘

floor

Добавленный в: v1.1.0

Возвращает наибольшее округлённое число, которое меньше или равно x, где округлённое число кратно 1 / 10 * N, либо ближайшее число соответствующего типа данных, если 1 / 10 * N не является точным значением.

Целочисленные аргументы можно округлять с отрицательным аргументом N. При неотрицательном N функция возвращает x.

Если округление вызывает переполнение (например, floor(-128, -1)), результат не определён.

Синтаксис

floor(x[, N])

Аргументы

  • x — Значение для округления. Float* или Decimal* или (U)Int*
  • N — Необязательный параметр. Количество знаков после запятой, до которых выполняется округление. По умолчанию равно нулю, то есть число округляется до целого. Может быть отрицательным. (U)Int*

Возвращаемое значение

Возвращает округлённое число того же типа, что и x. Float* или Decimal* или (U)Int*

Примеры

Пример использования

SELECT floor(123.45, 1) AS rounded
┌─rounded─┐
│   123.4 │
└─────────┘

Отрицательное значение точности

SELECT floor(123.45, -1)
┌─floor(123.45, -1)─┐
│               120 │
└───────────────────┘

round

Добавленный в: v1.1.0

Округляет значение до указанного числа десятичных знаков N.

  • Если N > 0, функция округляет вправо от десятичной точки.
  • Если N < 0, функция округляет влево от десятичной точки.
  • Если N = 0, функция округляет до ближайшего целого числа.

Функция возвращает ближайшее число указанного разряда. Если входное значение находится на одинаковом расстоянии от двух соседних чисел, функция использует банковское округление для значений типа Float* и округление в сторону от нуля для остальных числовых типов (Decimal*).

Если округление приводит к переполнению (например, round(255, -1)), результат не определён.

Синтаксис

round(x[, N])

Аргументы

  • x — Число для округления. Float* или Decimal* или (U)Int*
  • N — Необязательный параметр. Количество десятичных знаков, до которых выполняется округление. По умолчанию — 0. (U)Int*

Возвращаемое значение

Возвращает округлённое число того же типа, что и x. Float* или Decimal* или (U)Int*

Примеры

Значения типа Float

SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3;
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        0 │
│   1 │        1 │
└─────┴──────────┘

Десятичные значения на входе

SELECT cast(number / 2 AS  Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3;
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        1 │
│   1 │        1 │
└─────┴──────────┘

roundAge

Добавленный в: v1.1.0

Принимает число, обозначающее возраст человека, сравнивает его со стандартными возрастными диапазонами и возвращает либо наибольшее, либо наименьшее значение диапазона, в который попадает это число.

  • Возвращает 0 для age < 1.
  • Возвращает 17 для 1 ≤ age ≤ 17.
  • Возвращает 18 для 18 ≤ age ≤ 24.
  • Возвращает 25 для 25 ≤ age ≤ 34.
  • Возвращает 35 для 35 ≤ age ≤ 44.
  • Возвращает 45 для 45 ≤ age ≤ 54.
  • Возвращает 55 для age ≥ 55.

Синтаксис

roundAge(num)

Аргументы

  • age — Число, обозначающее возраст в годах. (U)Int* или Float*

Возвращаемое значение

Возвращает верхнюю или нижнюю границу диапазона, в который попадает age. UInt8

Примеры

Пример использования

SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72);
┌─number─┬─roundAge(number)─┐
│      0 │                0 │
│      5 │               17 │
│     20 │               18 │
│     31 │               25 │
│     37 │               35 │
│     54 │               45 │
│     72 │               55 │
└────────┴──────────────────┘

roundBankers

Добавленный в: v20.1.0

Округляет число до указанного десятичного разряда N. Если округляемое число находится ровно посередине между двумя числами, функция использует метод округления, называемый банковским округлением. Это метод округления по умолчанию для чисел с плавающей точкой в IEEE 754.

  • Если N > 0, функция округляет вправо от десятичной точки
  • Если N < 0, функция округляет влево от десятичной точки
  • Если N = 0, функция округляет до ближайшего целого числа

Синтаксис

roundBankers(x[, N])

Аргументы

  • x — Число, которое нужно округлить. (U)Int* или Decimal* или Float*
  • [, N] — Необязательный параметр. Количество десятичных знаков, до которых выполняется округление. По умолчанию — 0. (U)Int*

Возвращаемое значение

Возвращает значение, округлённое по методу банковского округления. (U)Int* или Decimal* или Float*

Примеры

базовое использование

SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10
┌───x─┬─b─┐
│   0 │ 0 │
│ 0.5 │ 0 │
│   1 │ 1 │
│ 1.5 │ 2 │
│   2 │ 2 │
│ 2.5 │ 2 │
│   3 │ 3 │
│ 3.5 │ 4 │
│   4 │ 4 │
│ 4.5 │ 4 │
└─────┴───┘

roundDown

Добавленный в: v20.1.0

Округляет число вниз до значения из указанного массива. Если значение меньше нижней границы, возвращается нижняя граница.

Синтаксис

roundDown(num, arr)

Аргументы

  • num — Число, которое нужно округлить вниз. (U)Int* или Decimal* или Float*
  • arr — Массив элементов, до одного из которых округляется вниз число num. Array((U)Int*) или Array(Float*)

Возвращаемое значение

Возвращает число, округлённое вниз до одного из элементов в arr. Если значение меньше наименьшей границы, возвращается наименьшая граница. (U)Int* или Float*

Примеры

Пример использования

SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5)
┌─number─┬─roundDown(number, [3, 4, 5])─┐
│      0 │                            3 │
│      1 │                            3 │
│      2 │                            3 │
│      3 │                            3 │
│      4 │                            4 │
│      5 │                            5 │
└────────┴──────────────────────────────┘

roundDuration

Добавленный в: v1.1.0

Округляет число вниз до ближайшего значения из набора часто используемых интервалов времени: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. Если число меньше единицы, возвращает 0.

Синтаксис

roundDuration(num)

Аргументы

  • num — число, которое нужно округлить до одного из чисел из набора стандартных длительностей. (U)Int* или Float*

Возвращаемое значение

Возвращает 0 при num < 1. В противном случае — одно из следующих значений: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. UInt16

Примеры

Пример использования

SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573)
┌─number─┬─roundDuration(number)─┐
│      0 │                     0 │
│      9 │                     1 │
│     19 │                    10 │
│     47 │                    30 │
│    101 │                    60 │
│    149 │                   120 │
│    205 │                   180 │
│    271 │                   240 │
│    421 │                   300 │
│    789 │                   600 │
│   1423 │                  1200 │
│   2345 │                  1800 │
│   4567 │                  3600 │
│   9876 │                  7200 │
│  24680 │                 18000 │
│  42573 │                 36000 │
└────────┴───────────────────────┘

roundToExp2

Добавленный в: v1.1.0

Округляет число вниз до ближайшей степени двойки (целой неотрицательной). Если число меньше единицы, возвращает 0.

Синтаксис

roundToExp2(num)

Аргументы

  • num — число, которое нужно округлить. (U)Int* или Float*

Возвращаемое значение

Возвращает num, округлённое вниз до ближайшей меньшей (целой неотрицательной) степени двойки; для num < 1 возвращается 0. (U)Int* или Float*

Примеры

Пример использования

SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50)
┌─number─┬─roundToExp2(number)─┐
│      0 │                   0 │
│      2 │                   2 │
│      5 │                   4 │
│     10 │                   8 │
│     19 │                  16 │
│     50 │                  32 │
└────────┴─────────────────────┘

trunc

Добавленный в: v1.1.0

Подобно floor, но возвращает округлённое число с наибольшим модулем, не превышающим модуль x.

Синтаксис

truncate(x[, N])

Псевдонимы: truncate

Аргументы

  • x — Значение, которое нужно округлить. Float* или Decimal* или (U)Int*
  • N — Необязательный параметр. Количество знаков после запятой, до которых выполняется округление. По умолчанию — 0, то есть округление до целого числа. (U)Int*

Возвращаемое значение

Возвращает округлённое число того же типа, что и x. Float* или Decimal* или (U)Int*

Примеры

Базовое использование

SELECT truncate(123.499, 1) AS res;
┌───res─┐
│ 123.4 │
└───────┘
Navigation