> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Документация по функциям округления

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

<Note>
  Приведённая ниже документация сгенерирована из системной таблицы `system.functions`
</Note>

{/*AUTOGENERATED_START*/}

<div id="ceil">
  ## ceil
</div>

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

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

**Синтаксис**

```sql theme={null}
ceiling(x[, N])
```

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

**Аргументы**

* `x` — Значение, которое нужно округлить. [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`(U)Int*`](/ru/reference/data-types/int-uint)
* `N` — Необязательно. Количество знаков после запятой, до которого нужно округлить. По умолчанию — ноль, то есть округление до целого числа. Может быть отрицательным. [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Округлённое число того же типа, что и `x`. [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`(U)Int*`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT ceiling(123.45, 1) AS rounded
```

```response title=Response theme={null}
┌─rounded─┐
│   123.5 │
└─────────┘
```

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

```sql title=Query theme={null}
SELECT ceiling(123.45, -1)
```

```response title=Response theme={null}
┌─ceiling(123.45, -1)─┐
│                 130 │
└─────────────────────┘
```

<div id="floor">
  ## floor
</div>

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

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

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

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

**Синтаксис**

```sql theme={null}
floor(x[, N])
```

**Аргументы**

* `x` — Значение для округления. [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`(U)Int*`](/ru/reference/data-types/int-uint)
* `N` — Необязательный параметр. Количество знаков после запятой, до которых выполняется округление. По умолчанию равно нулю, то есть число округляется до целого. Может быть отрицательным. [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает округлённое число того же типа, что и `x`. [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`(U)Int*`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT floor(123.45, 1) AS rounded
```

```response title=Response theme={null}
┌─rounded─┐
│   123.4 │
└─────────┘
```

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

```sql title=Query theme={null}
SELECT floor(123.45, -1)
```

```response title=Response theme={null}
┌─floor(123.45, -1)─┐
│               120 │
└───────────────────┘
```

<div id="round">
  ## round
</div>

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

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

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

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

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

**Синтаксис**

```sql theme={null}
round(x[, N])
```

**Аргументы**

* `x` — Число для округления. [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`(U)Int*`](/ru/reference/data-types/int-uint)
* `N` — Необязательный параметр. Количество десятичных знаков, до которых выполняется округление. По умолчанию — `0`. [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает округлённое число того же типа, что и `x`. [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`(U)Int*`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3;
```

```response title=Response theme={null}
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        0 │
│   1 │        1 │
└─────┴──────────┘
```

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

```sql title=Query theme={null}
SELECT cast(number / 2 AS  Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3;
```

```response title=Response theme={null}
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        1 │
│   1 │        1 │
└─────┴──────────┘
```

<div id="roundAge">
  ## roundAge
</div>

Добавленный в: 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`.

**Синтаксис**

```sql theme={null}
roundAge(num)
```

**Аргументы**

* `age` — Число, обозначающее возраст в годах. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float)

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

Возвращает верхнюю или нижнюю границу диапазона, в который попадает `age`. [`UInt8`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72);
```

```response title=Response theme={null}
┌─number─┬─roundAge(number)─┐
│      0 │                0 │
│      5 │               17 │
│     20 │               18 │
│     31 │               25 │
│     37 │               35 │
│     54 │               45 │
│     72 │               55 │
└────────┴──────────────────┘
```

<div id="roundBankers">
  ## roundBankers
</div>

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

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

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

<Info>
  **Примечания**

  * Если округляемое число находится ровно посередине между двумя числами, оно округляется до ближайшей чётной цифры в указанном десятичном разряде.
    Например: `3.5` округляется вверх до `4`, а `2.5` — вниз до `2`.
  * Функция `round` выполняет такое же округление для чисел с плавающей точкой.
  * Функция `roundBankers` также округляет целые числа таким же образом, например, `roundBankers(45, -1) = 40`.
  * В остальных случаях функция округляет числа до ближайшего целого.
</Info>

<Tip>
  **Используйте банковское округление при сложении или вычитании чисел**

  Банковское округление позволяет уменьшить влияние округления на результаты сложения или вычитания чисел.

  Например, просуммируем числа `1.5, 2.5, 3.5, 4.5` с разными способами округления:

  * Без округления: `1.5 + 2.5 + 3.5 + 4.5 = 12`.
  * Банковское округление: `2 + 2 + 4 + 4 = 12`.
  * Округление до ближайшего целого: `2 + 3 + 4 + 5 = 14`.
</Tip>

**Синтаксис**

```sql theme={null}
roundBankers(x[, N])
```

**Аргументы**

* `x` — Число, которое нужно округлить. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Decimal*`](/ru/reference/data-types/decimal) или [`Float*`](/ru/reference/data-types/float)
* `[, N]` — Необязательный параметр. Количество десятичных знаков, до которых выполняется округление. По умолчанию — `0`. [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает значение, округлённое по методу банковского округления. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Decimal*`](/ru/reference/data-types/decimal) или [`Float*`](/ru/reference/data-types/decimal) или [`Float*`](/ru/reference/data-types/float)

**Примеры**

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

```sql title=Query theme={null}
SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10
```

```response title=Response theme={null}
┌───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 │
└─────┴───┘
```

<div id="roundDown">
  ## roundDown
</div>

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

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

**Синтаксис**

```sql theme={null}
roundDown(num, arr)
```

**Аргументы**

* `num` — Число, которое нужно округлить вниз. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Decimal*`](/ru/reference/data-types/decimal) или [`Float*`](/ru/reference/data-types/float)
* `arr` — Массив элементов, до одного из которых округляется вниз число `num`. [`Array((U)Int*)`](/ru/reference/data-types/array) или [`Array(Float*)`](/ru/reference/data-types/array)

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

Возвращает число, округлённое вниз до одного из элементов в `arr`. Если значение меньше наименьшей границы, возвращается наименьшая граница. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float)

**Примеры**

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

```sql title=Query theme={null}
SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5)
```

```response title=Response theme={null}
┌─number─┬─roundDown(number, [3, 4, 5])─┐
│      0 │                            3 │
│      1 │                            3 │
│      2 │                            3 │
│      3 │                            3 │
│      4 │                            4 │
│      5 │                            5 │
└────────┴──────────────────────────────┘
```

<div id="roundDuration">
  ## roundDuration
</div>

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

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

**Синтаксис**

```sql theme={null}
roundDuration(num)
```

**Аргументы**

* `num` — число, которое нужно округлить до одного из чисел из набора стандартных длительностей. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float)

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

Возвращает `0` при `num` \< 1. В противном случае — одно из следующих значений: `1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000`. [`UInt16`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573)
```

```response title=Response theme={null}
┌─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 │
└────────┴───────────────────────┘
```

<div id="roundToExp2">
  ## roundToExp2
</div>

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

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

**Синтаксис**

```sql theme={null}
roundToExp2(num)
```

**Аргументы**

* `num` — число, которое нужно округлить. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float)

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

Возвращает `num`, округлённое вниз до ближайшей меньшей (целой неотрицательной) степени двойки; для `num < 1` возвращается `0`. [`(U)Int*`](/ru/reference/data-types/int-uint) или [`Float*`](/ru/reference/data-types/float)

**Примеры**

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

```sql title=Query theme={null}
SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50)
```

```response title=Response theme={null}
┌─number─┬─roundToExp2(number)─┐
│      0 │                   0 │
│      2 │                   2 │
│      5 │                   4 │
│     10 │                   8 │
│     19 │                  16 │
│     50 │                  32 │
└────────┴─────────────────────┘
```

<div id="trunc">
  ## trunc
</div>

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

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

**Синтаксис**

```sql theme={null}
truncate(x[, N])
```

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

**Аргументы**

* `x` — Значение, которое нужно округлить. [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`(U)Int*`](/ru/reference/data-types/int-uint)
* `N` — Необязательный параметр. Количество знаков после запятой, до которых выполняется округление. По умолчанию — 0, то есть округление до целого числа. [`(U)Int*`](/ru/reference/data-types/int-uint)

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

Возвращает округлённое число того же типа, что и `x`. [`Float*`](/ru/reference/data-types/float) или [`Decimal*`](/ru/reference/data-types/decimal) или [`(U)Int*`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT truncate(123.499, 1) AS res;
```

```response title=Response theme={null}
┌───res─┐
│ 123.4 │
└───────┘
```
