Problema com arredondamento de valor

3 respostas
FabricioPJ

Olá a todos. Tenho o seguinte método para limitar o número de de casas decimais de um valor float(já tentei com double, mas também não deu certo):

public float formataNumeros(float valor){
        DecimalFormat df = new DecimalFormat("0,00");
        df.setMaximumFractionDigits(2);
        df.format(valor);
        float valorFormatado = valor;
        return valorFormatado;
    }

... e no meu botão que calcula o número de parcelas de uma compra, está o seguinte código:

if(tfParcelas.getText().equals("")){
    JOptionPane.showMessageDialog(null, "ERRO: Campo \"PARCELAS\" vazio.", "ERRO", JOptionPane.ERROR_MESSAGE);
}
  
else{
float valorDivida = Float.parseFloat(tfValorDivida.getText());
int numParcelas = Integer.parseInt(tfParcelas.getText());
float valorParcelas = (valorDivida / numParcelas);
formataNumeros(valorParcelas);
labelParcelas.setText("" + valorParcelas);
}

Por exemplo, quando digito o valor 9998 e divido em 7 parcelas, o resultado que é exibido em meu JLabel é 1428.2858, sendo que eo especifiquei que só eram permitidas 2 casas decimais. Onde é que estou errando?

Grato pela atenção.

3 Respostas

T

Repita comigo: nunca mais vou usar float para fazer contas; sempre usarei double ou BigDecimal.
Repita comigo: nunca mais vou usar float para fazer contas; sempre usarei double ou BigDecimal.
Repita comigo: nunca mais vou usar float para fazer contas; sempre usarei double ou BigDecimal.

E depois de repetir isso, veja que você arredondou o valor (OK) mas não usou o valor retornado por “formataNumeros”.

float valorParcelas = (valorDivida / numParcelas);  
formataNumeros(valorParcelas);  
labelParcelas.setText("" + valorParcelas);

Note que no seu código não há nenhum lugar onde você atribua o valor arredondado a “valorParcelas”. Mais atenção…

T

Hum… o melhor mesmo é isto aqui:

public double formataNumeros(double valor){
        DecimalFormat df = new DecimalFormat("#,##0.00");
        return df.format (valor);
    }
...

labelParcelas.setText(formataNumeros (valorParcelas));
FabricioPJ

Opa, funcionou perfeitamente.

Alterei o tipo para double e usei o método Math.rint().

Agora ele arredonda corretamente.

Muito obrigado.

Criado 4 de setembro de 2008
Ultima resposta 4 de set. de 2008
Respostas 3
Participantes 2