A classe NumberFormat, faz parte do pacote java.text e permite formatar números conforme a localização geográfica em que você se encontra, realizando a distinção entre o sinal de ponto,milhar e de decimal, também identifica a posição do sinal do número e identifica o prefixo que indica a moeda em caso de valores monetários.
A Classe
Marcara de formatação | Formato impresso | Descrição |
---|---|---|
,##0,00 | 1,242.50 | Separa grupo dos milhares com vírgulas, se número menor que um mostra zeros na frente. |
$,##0.00;($,##0.00) | ($1,535,50) | Números negativos entre parênteses. mostra $ |
0.##### | 1244.5 | Se número entre -1 e 1 mostra zero na frente e não mostra zeros no final. |
import java.text.NumberFormat;
Os principais métodos do NumberFormat são:
- getNumberInstance() - Retorna a instância de um objeto com base no formato da localidade padrão. É utilizado para numeros
- getCurrencyInstance() - Usado para formatar moedas
- getIntegerInstance() - Usado para formatar números ignorando casas decimais
- getPercentInstance() - Usado para formatar frações pro exemplo 0,15 é formatado e mostrado como 15%
Exemplo:
import java.text.NumberFormat;
public class Formata {
public static void main(String[] args) {
System.out.println(NumberFormat.getCurrencyInstance().format(12345678.90));
// imprimirá R$ 12.345.678,90
}
}
Agora um exemplo para uma situação em que se há muitos números a serem formatados.
import java.text.NumberFormat;
public class Formata2 {
public static void main(String[] args) {
double n[]={523.34, 54344.23 ,95845.223 ,1084.895};
NumberFormat z = NumberFormat.getCurrencyInstance();
for (int a = 0; a < n.length; a++) {
if(a != 0)
System.out.print(", ");
System.out.print(z.format(n[a]));
}
System.out.println();
/*
Imprime:
R$ 523,34, R$ 54.344,23, R$ 95.845,22, R$ 1.084,90
*/
}
}
Ainda é possível criar uma formatação personalizada utilizando o objeto DecimalFormat. Por exemplo:
import java.text.DecimalFormat;
public class Formata {
public static void main(String[] args) {
double valor = 2000.0;
double vezes = 3.0;
double prestacao = valor/vezes;
DecimalFormat df = new DecimalFormat("0.##");
String dx = df.format(prestacao);
System.out.print(dx);
}
// sera impresso : 666,67
}
Algumas strings de formatação que podem ser utilizadas com o Decimal Format
Marcara de formatação | Formato impresso | Descrição |
---|---|---|
,##0,00 | 1,242.50 | Separa grupo dos milhares com vírgulas, se número menor que um mostra zeros na frente. |
$,##0.00;($,##0.00) | ($1,535,50) | Números negativos entre parênteses. mostra $ |
0.##### | 1244.5 | Se número entre -1 e 1 mostra zero na frente e não mostra zeros no final. |
É importante lembrar que DecimalFormat não é adequada para formatar notações científica, tabelas com colunas de largura fixa e nem números em formato hexadecimal ou octal.