sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo funciona Round() en PostgreSQL

En PostgreSQL, el round() La función se utiliza para redondear un número.

La función puede funcionar de dos maneras, dependiendo de cómo la use. Puede hacer que redondee el número al entero más cercano o a un número específico de lugares decimales.

Esto está determinado por la cantidad de argumentos que pasa a la función cuando la llama.

Sintaxis

El round() La función se puede utilizar de cualquiera de las siguientes formas:

round(dp or numeric)
round(v numeric, s int)

La primera sintaxis redondea el número al entero más próximo. El dp indica double precision .

La segunda sintaxis lo redondea a un número específico de lugares decimales. En este caso, v es el número, y s es el número de lugares decimales.

El tipo de devolución para esta función es el mismo que el tipo de entrada.

Ejemplo de primera sintaxis

Aquí hay un ejemplo que usa la primera sintaxis.

SELECT round(13.50);

Resultado:

14

En este caso, las fracciones de segundo son 50, por lo que el número se redondea hacia arriba al entero más cercano.

Si las fracciones de segundo fueran menos de 50, se habría redondeado hacia abajo y el resultado sería 13.

Aquí hay un ejemplo de eso.

SELECT round(13.49);

Resultado:

13

Ejemplo de segunda sintaxis

Aquí hay un ejemplo que usa la segunda sintaxis.

SELECT round(13.50, 1);

Resultado:

13.5

En este caso, no se redondeó nada y simplemente se eliminó el cero. En tales casos, devuelve el mismo resultado que habríamos visto si hubiéramos usado trunc() función.

Sin embargo, si ajustamos ligeramente las fracciones de segundo, veremos que el resultado se redondea.

SELECT 
  round(13.45, 1) AS "13.45",
  round(13.44, 1) AS "13.44";

Resultado:

13.45 | 13.44
-------+-------
13.5 | 13.4

Sin embargo, es importante tener en cuenta que el resultado depende completamente de la cantidad de segundos fraccionarios que especifique en el segundo argumento.

Aquí está el mismo ejemplo otra vez, pero con dos lugares decimales especificados.

SELECT 
  round(13.45, 2) AS "13.45",
  round(13.44, 2) AS "13.44";

Resultado:

13.45 | 13.44
-------+-------
13.45 | 13.44

En este caso no se redondeó nada, porque especifiqué el número exacto de decimales que proporcioné.

Sumar fracciones de segundo

No hay nada que le impida especificar más fracciones de segundo que el número original.

SELECT 
  round(13.45, 3) AS "13.45",
  round(13.44, 3) AS "13.44";

Resultado:

13.45 | 13.44
--------+--------
13.450 | 13.440

En este caso, simplemente agrega un cero a la parte derecha de las fracciones de segundo.

Este es un ejemplo de cómo especificar una cantidad de lugares decimales cuando el número original no incluye ninguna fracción de segundo.

SELECT round(12, 3);

Resultado:

12.000

Posiciones decimales negativas

Esto es lo que sucede cuando el segundo argumento es un valor negativo.

SELECT round(789, -2);

Resultado:

800

Aquí hay algunos más.

SELECT 
  round(789, -2),
  round(789, -1),
  round(489, -2),
  round(489, -1),
  round(489, -3);

Resultado:

round | round | round | round | round
-------+-------+-------+-------+-------
800 | 790 | 500 | 490 | 0

Redondo() frente a Trunc()

En algunos casos, el round() la función puede parecer que funciona de manera similar a trunc() . Pero son bastante diferentes.

El round() función redondea el número. El número se redondea al entero más cercano o al número especificado de lugares decimales (dependiendo de si le da un argumento o dos argumentos).

El trunc() La función, por otro lado, simplemente trunca el número hacia cero o hasta el lugar decimal especificado. No se realiza el redondeo.

Aquí hay un ejemplo para demostrar la diferencia.

SELECT 
  round(1.49, 1),
  trunc(1.49, 1);

Resultado:

round | trunc
-------+-------
1.5 | 1.4