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