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.
NumberFormat possui três mêtodos para formatar números, valores monetários e percentuais. Para fazer uso dela é necessário importa-la.


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.