Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

3 maneiras de formatar um número para 2 casas decimais no Oracle


Ao usar o Oracle Database, você pode usar funções como TO_CHAR(number) para retornar números como uma string, formatada com duas casas decimais (ou quantas casas decimais você precisar).

Ou você pode usar funções como ROUND(number) e TRUNC(number) para arredondar ou truncar o número para o número necessário de casas decimais.

O TO_CHAR() Função


Aqui está um exemplo que usa o TO_CHAR(number) função:
SELECT TO_CHAR(1.2345, 'fm99D00')
FROM DUAL;

Resultado:
1.23

Neste caso, o número original tem mais de duas casas decimais e, portanto, o resultado simplesmente o trunca para o número especificado de zeros que segue o caractere decimal/radix (D ) no modelo de formato.

A razão pela qual usei zeros após o caractere decimal é fornecer zeros à direita, se necessário.

Exemplo:
SELECT TO_CHAR(7, 'fm99D00')
FROM DUAL;

Resultado:
7.00

Se eu não quiser os zeros à direita, posso alterar o 0 caracteres para 9 s.

Aqui está uma comparação dos dois:
SELECT 
    TO_CHAR(7, 'fm99D00') AS "r1",
    TO_CHAR(7, 'fm99D99') AS "r2"
FROM DUAL;

Resultado:
     r1    r2 
_______ _____ 
7.00    7.   

Usando 9 s neste caso, resultou em um caractere de base, mas sem casas decimais.

Devo salientar que fm é um modificador de formato que remove qualquer preenchimento que possa ser aplicado ao resultado. Você pode omitir isso se não se importar que o resultado seja preenchido. Embora, se você fizer isso, poderá acabar com zeros à direita, mesmo ao usar o 9 elemento de formato.

Aqui está o que acontece quando eu removo o fm do exemplo anterior:
SELECT 
    TO_CHAR(7, '99D00') AS "r1",
    TO_CHAR(7, '99D99') AS "r2"
FROM DUAL;

Resultado:
       r1        r2 
_________ _________ 
  7.00      7.00   

Claro, você não está limitado apenas a duas casas decimais – você pode especificar mais casas decimais em seu modelo de formato, se necessário.

Exemplo:
SELECT TO_CHAR(7, 'fm99D0000')
FROM DUAL;

Resultado:
7.0000

O ROUND() Função


Aqui está um exemplo que usa o ROUND(number) função:
SELECT ROUND(1.2573, 2)
FROM DUAL;

Resultado:
1.26

Tele ROUND() função arredonda um número para uma determinada casa decimal. Aqui, especificamos duas casas decimais, mas poderíamos ter especificado qualquer número.

Neste caso, o número foi arredondado para cima.

O TRUNC() Função


Aqui está um exemplo que usa o TRUNC(number) função:
SELECT TRUNC(1.2573, 2)
FROM DUAL;

Resultado:
1.25

O TRUNC() função trunca um número para uma determinada casa decimal. Não ocorre arredondamento.