Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Formatação de casas decimais para o nextDouble()

Pessoal, neste exercício estou ordenando pelo número da conta, mas estou gerando saldo aleatório para todas as contas. Depois de gerados números e saldos estou imprimindo todas as contas com seus saldos. Como faço para que o saldo seja impresso com apenas duas casas decimais? Na geração dos saldos aleatórios ou na hora de imprimir (preferível)?

public class TestaOrdenacao2 {

    public static void main(String[] args) {

        // Inicializando a lista de contas
        List<ContaPoupanca> contas = new LinkedList<>();

        // Criando um array com as contas a serem adicionadas
        ContaPoupanca[] contasNovas = new ContaPoupanca[20];

        // Criando o gerador de numeros aleatórios
        Random gerador = new Random();

        // Gravando as contas novas com números e saldos aleatórios na lista de
        // contas
        for (int i = 0; i < contasNovas.length; i++) {
            contasNovas[i] = new ContaPoupanca();
            contasNovas[i].setNumero(gerador.nextInt(1000));
            contasNovas[i].setSaldo(gerador.nextDouble() + gerador.nextInt());
            contas.add(contasNovas[i]);
        }

        // Imprimindo contas desordenadas
        System.out.println("CONTAS DESORDENADAS");
        for (ContaPoupanca contaCadastrada : contas) {
            System.out.println("Conta: " + contaCadastrada.getNumero() + " Saldo: R$" + contaCadastrada.getSaldo());
        }

        System.out.println("================================================");

        // Ordenando as contas por número
        Collections.sort(contas);
        System.out.println("ORDENANDO AS CONTAS PELO NÚMERO");
        for (ContaPoupanca contaCadastrada : contas) {
            System.out.println("Conta: " + contaCadastrada.getNumero() + " Saldo: R$" + contaCadastrada.getSaldo());
        }
    }

}
2 respostas
solução!

Olá Rafael,

Uma alternativa (dentre várias possíveis) é você usar a classe DecimalFormat, ficando assim:

System.out.println("Conta: " + contaCadastrada.getNumero() + " Saldo: R$" + new DecimalFormat("0.##").format(contaCadastrada.getSaldo()));

Esse DecimalFormat porém tem uma falha. Se o valor do saldo for por exemplo 100.99173, ele vai mostrar 100,99, mas se for 100.99873, ele vai arredondar para cima, ficando 101 e não acrescentando as casas decimais, mostrando 101 mesmo. O que eu acho que não é o que você quer, então talvez te ajude o seguinte:

System.out.printf("%.2f", 100.99873);

Esse método printf recebe como parâmetro um formatador, que no caso foi especificado para 2 casas decimais, esse sim vai se comportar sempre exibindo o valor com 2 casas, ocorrendo arredondamento ou não.

Note que o printf, diferente do println, não pula linha, então você poderia encaixar no seu código da seguinte forma:

System.out.print("Conta: " + contaCadastrada.getNumero() + " Saldo: R$");
System.out.printf("%.2f\n", contaCadastrada.getSaldo());

Trocando seu println pelo print (para não pular linha) e inserido após o formatador do printf um \n, para forçar a pular linha.

Abraço.

Ótimo, Emerson!

Era isso mesmo que estava querendo fazer, valeu!!!