Motivação

Durante o desenvolvimento dos mais variados tipos de sistemas, é comum que o desenvolvedor se depare com a necessidade de formatar valores numéricos (principalmente monetários e percentuais). Essa tarefa geralmente visa atender a requisitos que definem como os dados devem ser apresentados na aplicação ou gravados no banco de dados.

Em Java, esse tipo de formatação pode ser feita de forma simples por meio da classe NumberFormat, que dispõe de métodos específicos para cada situação.

A classe NumberFormat

A classe NumberFormat, contida no pacote java.text, contém métodos para realizar as principais formatações de valores numéricos em Java. Por ser uma classe abstrata, não é preciso instanciá-la diretamente por meio do operador new. Ao invés disso, deve-se utilizar os métodos a seguir para obter os objetos que receberão números, inteiros ou decimais, e retornarão strings no formato desejado:

  • getInstance(): retorna um objeto para formatação padrão com base no idioma e localidade atuais do projeto;
  • getNumberInstance(Locale): retorna um objeto para formatação padrão de inteiros ou decimais com base no idioma e localidade informados;
  • getCurrencyInstance(Locale): retorna um objeto para formatação de valores monetários com base no idioma e localidade informados;
  • getPercentInstance(Locale): retorna um objeto para formatação de percentuais com base no idioma e localidade informados.

Como geralmente os formatos nos quais os números são escritos dependem do idioma e localidade, essa informação deve ser fornecida aos métodos acima para que detalhes como símbolo monetário e separador de milhar/decimal sejam definidos corretamente. Para isso, devemos utilizar a classe Locale, contida no pacote java.util, e que recebe em seu construtor dois argumentos, que especificam o idioma e o país desejado.

Exemplos

Na Listagem 1 temos um exemplo de utilização de todos os métodos citados anteriormente.


    01 package formata.dados;
    02
    03 import java.text.NumberFormat;
    04 import java.util.Locale;
    05
    06 public class Testes_Metodos_NumberFormat {
    07 	
    08	public static void main(String[] args) {
    09	
    10		Locale localeBR = new Locale("pt","BR");
    11		
    12		double valorReal = 291933.1233;
    13		float valorPercentual = 0.11f;
    14		intvalorInteiro = 82819912;
    15		
    16		NumberFormat inteiro = NumberFormat.getInstance();	
    17		NumberFormat dinheiro = NumberFormat.getCurrencyInstance(localeBR);
    18		NumberFormat percentual = NumberFormat.getPercentInstance(localeBR);
    19		NumberFormat numberFormat = NumberFormat.getNumberInstance(localeBR);
    20		
    21		System.out.println("Valor Atual: "+valorReal);
    22		System.out.println("Valor Formatado em Moeda: "+dinheiro.format(valorReal));
    23		
    24		System.out.println("Valor Atual: "+valorPercentual);
    25		System.out.println("Valor Formatado em Percentual: "+percentual.format(valorPercentual));
    26		
    27		System.out.println("Valor Atual: "+valorInteiro);
    28		System.out.println("Valor Formatado: "+inteiro.format(valorInteiro));
    29		
    30		System.out.println("Valor Atual: "+valorReal);
    31		System.out.println("Valor Formatado padrão: "+numberFormat.format(valorReal));
    32	}
    33 }
    
Listagem 1. Formatando dados numéricos

Linhas 3 e 4: importação das classes necessárias;

Linhas 10: declaração da variável do tipo Locale, responsável por definir o idioma e localidade a serem utilizados nas formatações;

Linhas 12 a 14: declaração das variáveis que representam os valores numéricos a serem formatados;

Linha 16 a 19: declaração dos objetos do tipo NumberFormat, instanciados por meio dos métodos vistos anteriormente;

Linhas 21 a 31: impressão dos valores originais e seus equivalentes formatados, utilizando o método format() de cada instância da classe NumberFormat.

Na Figura 1 podemos ver o resultado da execução desse código. Observe, no primeiro exemplo, a exibição correta do símbolo da moeda Real (R$) e do ponto como separador de milhar, enquanto a vírgula separa as casas decimais da parte inteira do número, características da escrita na língua portuguesa no Brasil.

Figura 1. Valores formatados

Por meio de uma estrutura simples, a classe NumberFormat, em conjunto com a Locale, nos permite alcançar os principais requisitos de formatação, adequando a forma como os valores são impressos, ou armazenados, à cultura de cada idioma e localidade.


Clique aqui e veja mais exemplos criados pela comunidade DevMedia :)