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