Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Resolução

/**
 * Roberto está desenvolvendo um sistema de relatórios financeiros e precisa formatar
 * valores monetários com duas casas decimais. Construa um programa que receba um valor
 * monetário e exiba o valor formatado com duas casas decimais.
 *
 * Exemplo de Entrada:
 * Digite o valor: 19,9876
 *
 * Saída esperada:
 * Valor formatado: R$ 19,99
 */

package com.github.lucasdevrj.exercicios.formatandonumeros;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;

public class Formatacao {

    private BigDecimal valor;

    private String getValor() {
        NumberFormat formatoBR = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
        String precoFormatado = formatoBR.format(valor);
        return precoFormatado;
    }

    private void setValor(BigDecimal valor) {
        this.valor = valor.setScale(2, RoundingMode.HALF_UP);
    }

    public void formataValor() {
        Scanner entrada = new Scanner(System.in);

        System.out.print("Digite o valor: ");
        setValor(entrada.nextBigDecimal());

        entrada.close();

        System.out.println("Valor formatado: " + getValor());
    }
}
package com.github.lucasdevrj.exercicios.formatandonumeros;

public class Principal {
    public static void main(String[] args) {
        Formatacao formatacao = new Formatacao();
        formatacao.formataValor();
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Beleza?

1 resposta

Oi, Lucas. Tudo bem com você?

Sua resolução ficou correta e atende ao objetivo da atividade. Você utilizou BigDecimal, que é uma escolha interessante para trabalhar com valores monetários, principalmente porque evita algumas imprecisões comuns de tipos como double. O uso de setScale(2, RoundingMode.HALF_UP) também garante o arredondamento para duas casas decimais.

Outro ponto positivo foi utilizar NumberFormat.getCurrencyInstance() com o Locale("pt", "BR"). Dessa forma, a própria API do Java cuida da representação do valor como moeda brasileira, incluindo o símbolo R$ e a formatação adequada das casas decimais.

Como você faria essa implementação caso precisasse formatar valores de diferentes moedas, como real, dólar e euro, mantendo a mesma lógica?

Parabéns pela resolução, Lucas. Obrigado por compartilhar o exercício e continue praticando e trazendo suas soluções para o fórum. O espaço fica à disposição para acompanhar sua evolução.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!