Formatando números

Boa tarde pessoal!

Depois de um tempo sem postar, estou voltando....
Vou colocar aqui apenas alguns modelos de formatação, para demonstração, que também acredito que sejam os mais utilizados.
Isso foi uma das coisas que eu tive um pouco de dificuldade, tanto em fazer como em achar material para consultar.
    // Formato moeda da localidade atual do sistema
    NumberFormat formato1 = NumberFormat.getCurrencyInstance();

    // Formato moeda especificando a localidade (Estados Unidos)
    NumberFormat formato2 = NumberFormat.getCurrencyInstance(new Locale("en", "EN"));

    // Formato inteiro (arredondado)
    NumberFormat formato3 = NumberFormat.getIntegerInstance();

    // Formato de porcentagem
    NumberFormat formato4 = NumberFormat.getPercentInstance();

    // Formato decimal
    NumberFormat formato5 = new DecimalFormat(".#");

O getCurrencyInstance() pega a moeda da localidade atual do sistema mas, caso seja especificada a localidade, como no formato2, ele utiliza a moeda daquela localidade.

A formatação para número inteiro é feita de forma simples. Se o valor decimal for menor que 5, é feito o arredondamento para baixo, senão é feito para cima.

A formatação de casas decimais é feita através da mascara colocada logo após DecimalFormat, onde ".#" especifica a quantidade de casas decimais a serem utilizadas. (1 neste caso)

E como utilizar isso?
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView texto = (TextView) findViewById(R.id.textView1);
        double valor = 15.97;

        NumberFormat formato1 = NumberFormat.getCurrencyInstance();
        NumberFormat formato2 = NumberFormat.getCurrencyInstance(new Locale("en", "EN"));
        NumberFormat formato3 = NumberFormat.getIntegerInstance();
        NumberFormat formato4 = NumberFormat.getPercentInstance();
        NumberFormat formato5 = new DecimalFormat(".#");
        texto.setText(formato1.format(valor));
        Log.i("Moeda atual", formato1.format(valor));
        Log.i("Moeda EUA", formato2.format(valor));
        Log.i("Número inteiro", formato3.format(valor));
        Log.i("Porcentagem", formato4.format(valor));
        Log.i("Decimal", formato5.format(valor));
    }

Coloquei todas as formatações para que sejam vistas no log.
Qualquer dúvida é só postar aí. Até a próxima!

Sobre o autor

André Luís Batista Kunde
Técnico em Informática (2004), Bacharel em Administração com ênfase em Marketing (2009), buscando ser Engenheiro de Software, Trabalhando com software educacional e me aventurando pelo mundo da programação mobile.

11 comentários:

  1. Como eu faço pra arredondar por exemplo: 6,15 pra 6,2?
    Voce usando o getIntegerInstance(), eu botando 6,2 ele ja arredonda pra 7, e eu nao quero isso, eu quero arredondar se a segunda casa depois da virgula for maior ou igual a 5. Voce pode me ensinar?

    ResponderExcluir
    Respostas
    1. Boa noite Filipi Andrade!

      Me desculpe toda essa demora, estive muito corrido.
      Mas respondendo a sua pergunta, espero que ainda ajude, basta você colocar mais um #
      como eu disse no post, cada # representa uma casa decimal.
      ficaria desta forma:
      NumberFormat formato5 = new DecimalFormat(".##");

      Excluir
  2. gostei da sua explicação
    obrigado

    ResponderExcluir
  3. Amigos como é que consigo Alinhar a direita o VALOR no TextView. Obg

    ResponderExcluir
    Respostas
    1. Boa noite!

      Esta parte de alinhamento do texto no TextView eu faço no xml, utilizando o seguinte código:
      <TextView
      android:id="@+id/TextView1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:gravity="right"
      android:text="Teste de alinhamento" />

      Excluir
  4. public static String moeda (Double valor){
    NumberFormat formato1 = NumberFormat.getCurrencyInstance();
    String s = (formato1.format(valor));
    return s;
    }
    Somente isso simples.

    ResponderExcluir
  5. Ajudou bastante, muito obrigado André Luís

    ResponderExcluir
  6. public void calcular (View view) {
    n1 = Double.parseDouble(metragemdacasa.getText().toString());
    results = n1 / 10;
    metroos.setText(String.valueOf(results));





    eu quero arredondar o results

    ResponderExcluir
  7. cara muito show ! resolveu meu problema! vlw

    ResponderExcluir
  8. Galera boa tarde,
    Estou com dificuldades para entender esse trecho do tutorial de jogo da forca
    Minhas dúvidas são
    1-porque tem o "(int) ali como se estivesse convertendo a palavra sorteada para um inteiro
    2-Como funciona esse método do Random? Pois se estou fazendo uso do Random para palavras pq ali ele converte de String para inteiro para depois saber o tamanho da palavra sorteada?



    public String sorteio() {
    String palavraSorteada = palavras[(int)(random()*palavras.length)];

    return palavraSorteada;
    }

    public static double random() {
    Random r = new Random();

    return r.nextDouble();
    }
    }

    ResponderExcluir
  9. Bom dia estou tendo dificuldade para formatar meu código moeda segue abaixo

    Cart

    private void loadListfood() { cart = new Database(this).getCarts(); adapter = new CartAdapter(cart, this); recyclerView.setAdapter(adapter);

    int total = 0; for (Order order : cart) total += (Integer.parseInt(order.getPrice())) * (Integer.parseInt(order.getQuantity())); NumberFormat nf = NumberFormat.getCurrencyInstance();

    txtTotalPrice.setText(nf.format(total));

    }

    CartAdapter

    @Override public void onBindViewHolder(CartViewHolder holder, int position) { TextDrawable drawable = TextDrawable.builder() .buildRound("" + listData.get(position).getQuantity(), Color.BLUE); holder.img_cart_count.setImageDrawable(drawable);

    Locale locale = new Locale("pt", "BR"); NumberFormat fmt = NumberFormat.getCurrencyInstance(locale); int price = (Integer.parseInt(listData.get(position).getPrice())) * (Integer.parseInt(listData.get(position).getQuantity())); holder.txt_price.setText(fmt.format(price));

    holder.txt_cart_name.setText(listData.get(position).getProductName());

    }

    @Override public int getItemCount () { return listData.size(); } }

    ResponderExcluir

Copyright © 2013 Aprendendo Android and Blogger Themes.