MariaDB tiene un ROUND()
función y un TRUNCATE()
función que puede devolver los mismos resultados o resultados diferentes, dependiendo del valor exacto de sus argumentos.
Como sugieren los nombres de las funciones, ROUND()
rondas el número y TRUNCATE()
trunca el número. Truncar un número simplemente lo corta sin realizar ningún redondeo.
A continuación se muestra un resumen rápido de la diferencia entre ROUND()
y TRUNCATE()
en MariaDB.
La diferencia
Aquí está la diferencia entre cada función en pocas palabras:
ROUND()
rondas su argumento a un número específico de lugares decimales. Esto a veces hará que el resultado se redondee y otras veces no.TRUNCATE()
simplemente trunca su argumento a un número específico de lugares decimales. No se produce redondeo.
Sintaxis y definiciones
Primero, aquí están las sintaxis y definiciones de cada función.
ROUND()
El ROUND()
La función se puede utilizar de las dos formas siguientes:
ROUND(X)
ROUND(X,D)
ROUND()
redondea el argumento X
a D
lugares decimales. El algoritmo de redondeo depende del tipo de datos de X
.
TRUNCATE()
El TRUNCATE()
La función se puede usar con una sola sintaxis:
TRUNCATE(X,D)
TRUNCATE()
devuelve el número X
, truncado a D
lugares decimales.
Ejemplo
Aquí hay una comparación para demostrar la diferencia entre ROUND()
y TRUNCATE()
:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Resultado:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
En este caso, el ROUND()
función redondeó el número hacia arriba, porque el siguiente dígito (8
) es mayor que 5
.
El TRUNCATE()
función por otro lado, simplemente truncó el número en el lugar decimal especificado. TRUNCATE()
no hace ningún redondeo. Simplemente corta el número en el lugar especificado.
Ambas funciones aceptan un valor negativo para el lugar decimal y se aplica la misma lógica respectiva:
SELECT
TRUNCATE(36789, -2),
ROUND(36789, -2);
Resultado:
+---------------------+------------------+ | TRUNCATE(36789, -2) | ROUND(36789, -2) | +---------------------+------------------+ | 36700 | 36800 | +---------------------+------------------+
Mismo resultado
Ambas funciones a veces pueden devolver el mismo resultado. Todo depende del valor de los argumentos que se pasan.
Aquí hay un ejemplo donde ambos devuelven el mismo resultado:
SELECT
TRUNCATE(3.6749, 2),
ROUND(3.6749, 2);
Resultado:
+---------------------+------------------+ | TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) | +---------------------+------------------+ | 3.67 | 3.67 | +---------------------+------------------+
En este caso, ROUND()
no redondeó el número, porque el siguiente dígito (4
) era menor que 5
. Por lo tanto, ambos resultados son iguales.
El FLOOR()
Función
Ambas funciones son diferentes a FLOOR()
función, que devuelve el valor entero más grande no mayor que su argumento. FLOOR()
no acepta un segundo argumento como ROUND()
y TRUNCATE()
do (solo devuelve un número entero de todos modos).