Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Funciones de redondeo

ceil

Introducido en: v1.1.0

Como floor, pero devuelve el menor número redondeado que sea mayor o igual que x. Si el redondeo provoca un desbordamiento (por ejemplo, ceiling(255, -1)), el resultado no está definido.

Sintaxis

ceiling(x[, N])

Alias: ceiling

Argumentos

  • x — El valor que se desea redondear. Float* o Decimal* o (U)Int*
  • N — Opcional. El número de posiciones decimales al que se redondea. El valor predeterminado es cero, lo que significa que se redondea a un entero. Puede ser negativo. (U)Int*

Valor devuelto

Devuelve un número redondeado del mismo tipo que x. Float* o Decimal* o (U)Int*

Ejemplos

Uso básico

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

Precisión negativa

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

floor

Introducido en: v1.1.0

Devuelve el mayor número redondeado que sea menor o igual que x, donde el número redondeado es un múltiplo de 1 / 10 * N, o el número más cercano del tipo de dato correspondiente si 1 / 10 * N no es exacto.

Los argumentos enteros pueden redondearse con un argumento N negativo. Con N no negativo, la función devuelve x.

Si el redondeo provoca un desbordamiento (por ejemplo, floor(-128, -1)), el resultado es indefinido.

Sintaxis

floor(x[, N])

Argumentos

  • x — El valor que se va a redondear. Float* o Decimal* o (U)Int*
  • N — Opcional. El número de posiciones decimales al que redondear. El valor predeterminado es cero, lo que significa redondear a un entero. Puede ser negativo. (U)Int*

Valor devuelto

Devuelve un número redondeado del mismo tipo que x. Float* o Decimal* o (U)Int*

Ejemplos

Ejemplo de uso

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

Precisión negativa

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

round

Introducido en: v1.1.0

Redondea un valor a un número determinado de posiciones decimales N.

  • Si N > 0, la función redondea a la derecha del punto decimal.
  • Si N < 0, la función redondea a la izquierda del punto decimal.
  • Si N = 0, la función redondea al entero más próximo.

La función devuelve el número más cercano del orden especificado. Si el valor de entrada está a igual distancia de dos números adyacentes, la función usa redondeo bancario para entradas Float* y redondea alejándose de cero para los demás tipos numéricos (Decimal*).

Si el redondeo provoca un desbordamiento (por ejemplo, round(255, -1)), el resultado no está definido.

Sintaxis

round(x[, N])

Argumentos

  • x — Un número que se va a redondear. Float* o Decimal* o (U)Int*
  • N — Opcional. El número de posiciones decimales al que se redondea. El valor predeterminado es 0. (U)Int*

Valor devuelto

Devuelve un número redondeado del mismo tipo que x. Float* o Decimal* o (U)Int*

Ejemplos

Valores de entrada de coma flotante

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

Valores decimales

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

Introducido en: v1.1.0

Toma un número que representa la edad de una persona, lo compara con rangos de edad estándar y devuelve el valor más alto o más bajo del rango en el que se encuentra el número.

  • Devuelve 0, para age < 1.
  • Devuelve 17, para 1 ≤ age ≤ 17.
  • Devuelve 18, para 18 ≤ age ≤ 24.
  • Devuelve 25, para 25 ≤ age ≤ 34.
  • Devuelve 35, para 35 ≤ age ≤ 44.
  • Devuelve 45, para 45 ≤ age ≤ 54.
  • Devuelve 55, para age ≥ 55.

Sintaxis

roundAge(num)

Argumentos

  • age — Un número que representa una edad en años. (U)Int* o Float*

Valor devuelto

Devuelve la edad más alta o más baja del rango en el que cae age. UInt8

Ejemplos

Ejemplo de uso

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

Introducido en: v20.1.0

Redondea un número a la posición decimal N especificada. Si el número que se va a redondear está exactamente a mitad de camino entre dos números, la función utiliza un método de redondeo llamado redondeo bancario, que es el método de redondeo predeterminado para los números de coma flotante definidos en IEEE 754.

  • Si N > 0, la función redondea a la derecha del punto decimal
  • Si N < 0, la función redondea a la izquierda del punto decimal
  • Si N = 0, la función redondea al entero más cercano

Sintaxis

roundBankers(x[, N])

Argumentos

  • x — Un número para redondear. (U)Int* o Decimal* o Float*
  • [, N] — Opcional. El número de posiciones decimales al que se redondea. El valor predeterminado es 0. (U)Int*

Valor devuelto

Devuelve un valor redondeado mediante el método de redondeo bancario. (U)Int* o Decimal* o Float*

Ejemplos

Uso básico

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

Introducido en: v20.1.0

Redondea un número hacia abajo al elemento del array especificado. Si el valor es menor que el límite inferior, se devuelve el límite inferior.

Sintaxis

roundDown(num, arr)

Argumentos

Valor devuelto

Devuelve un número redondeado hacia abajo hasta un elemento de arr. Si el valor es menor que el límite inferior mínimo, se devuelve ese límite. (U)Int* o Float*

Ejemplos

Ejemplo de uso

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

Introducido en: v1.1.0

Redondea un número hacia abajo al valor más cercano dentro de un conjunto de duraciones de uso común: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. Si el número es menor que uno, devuelve 0.

Sintaxis

roundDuration(num)

Argumentos

  • num — Un número que se redondea a uno de los valores del conjunto de duraciones comunes. (U)Int* o Float*

Valor devuelto

Devuelve 0 para num < 1. En caso contrario, uno de los siguientes: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. UInt16

Ejemplos

Ejemplo de uso

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

Introducido en: v1.1.0

Redondea un número hacia abajo hasta la potencia de dos (entera no negativa) más cercana. Si el número es menor que uno, devuelve 0.

Sintaxis

roundToExp2(num)

Argumentos

Valor devuelto

Devuelve num redondeado hacia abajo hasta la potencia de dos más cercana (entera no negativa); en caso contrario, devuelve 0 si num < 1. (U)Int* o Float*

Ejemplos

Ejemplo de uso

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

Introducido en: v1.1.0

Como floor, pero devuelve el número redondeado cuyo valor absoluto es el mayor que no supera el de x.

Sintaxis

truncate(x[, N])

Alias: truncate

Argumentos

  • x — El valor que se redondeará. Float* o Decimal* o (U)Int*
  • N — Opcional. El número de posiciones decimales al que se redondeará. El valor predeterminado es cero, lo que significa que se redondea a un entero. (U)Int*

Valor devuelto

Devuelve un número redondeado del mismo tipo que x. Float* o Decimal* o (U)Int*

Ejemplos

Uso básico

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