PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como Round() funciona no PostgreSQL


No PostgreSQL, o round() função é usada para arredondar um número.

A função pode funcionar de duas maneiras, dependendo de como você a usa. Você pode arredondar o número para o inteiro mais próximo ou para um número especificado de casas decimais.

Isso é determinado pelo número de argumentos que você passa para a função quando a chama.

Sintaxe


A round() A função pode ser usada de uma das seguintes maneiras:
round(dp or numeric)
round(v numeric, s int)

A primeira sintaxe arredonda o número para o inteiro mais próximo. O dp indica double precision .

A segunda sintaxe arredonda para um número especificado de casas decimais. Nesse caso, v é o número e s é o número de casas decimais.

O tipo de retorno para esta função é o mesmo que o tipo de entrada.

Exemplo da primeira sintaxe


Aqui está um exemplo que usa a primeira sintaxe.
SELECT round(13.50);

Resultado:
14

Neste caso, os segundos fracionários são 50 e, portanto, o número é arredondado para cima para o inteiro mais próximo.

Se os segundos fracionários fossem menores que 50, teriam sido arredondados para baixo e o resultado seria 13.

Aqui está um exemplo disso.
SELECT round(13.49);

Resultado:
13

Exemplo de segunda sintaxe


Aqui está um exemplo que usa a segunda sintaxe.
SELECT round(13.50, 1);

Resultado:
13.5

Nesse caso, nada foi arredondado para cima e zero foi simplesmente descartado. Nesses casos, ele retorna o mesmo resultado que teríamos visto se tivéssemos usado o trunc() função.

No entanto, se ajustarmos ligeiramente os segundos fracionários, veremos que o resultado é arredondado.
SELECT 
  round(13.45, 1) AS "13.45",
  round(13.44, 1) AS "13.44";

Resultado:
13.45 | 13.44
-------+-------
13.5 | 13.4

No entanto, é importante observar que o resultado depende completamente de quantos segundos fracionários você especifica no segundo argumento.

Aqui está o mesmo exemplo novamente, mas com duas casas decimais especificadas.
SELECT 
  round(13.45, 2) AS "13.45",
  round(13.44, 2) AS "13.44";

Resultado:
13.45 | 13.44
-------+-------
13.45 | 13.44

Nesse caso, nada foi arredondado, porque especifiquei o número exato de casas decimais que forneci.

Adicionando segundos fracionários


Não há nada que impeça você de especificar mais segundos fracionários do que o 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

Nesse caso, ele simplesmente adiciona um zero à parte direita dos segundos fracionários.

Aqui está um exemplo de especificação de um número de casas decimais quando o número original não inclui nenhum segundo fracionário.
SELECT round(12, 3);

Resultado:
12.000

Casas decimais negativas


Aqui está o que acontece quando o segundo argumento é um valor negativo.
SELECT round(789, -2);

Resultado:
800

Aqui estão mais alguns.
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

Round() vs Trunc()


Em alguns casos, o round() a função pode parecer funcionar de maneira semelhante a trunc() . Mas eles são bem diferentes.

A round() função arredonda o número. O número é arredondado para o inteiro mais próximo ou para o número especificado de casas decimais (dependendo se você fornecer um argumento ou dois argumentos).

O trunc() A função, por outro lado, simplesmente trunca o número para zero ou para a casa decimal especificada. Nenhum arredondamento é realizado.

Aqui está um exemplo para demonstrar a diferença.
SELECT 
  round(1.49, 1),
  trunc(1.49, 1);

Resultado:
round | trunc
-------+-------
1.5 | 1.4