sql >> Base de Datos >  >> RDS >> MariaDB

MariaDB ROUND() frente a TRUNCATE()

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).