Multiplicação de valores com resultado curioso

3 respostas
furacao123

Aew galera estou tendo um problema

Quando faço a multiplicação de um valor tanto com BigDecimal quanto Double e retorna uma dizima que nao existe por exemplo

public class TesteCalculo {

    private static BigDecimal d1;

    public static void main(String[] args) {

    d1 = new BigDecimal(29.9);

    d1 = d1.multiply(new BigDecimal(3));

    System.out.println(d1);

    }

}

Retorno

89.69999999999999573674358543939888477325439453125

E se eu nao arredondo pra cima da problema pois perco 1 centavo por que isso acontece nao deveria retornar 89.70?

3 Respostas

E

Não é a multiplicação que tem resultado curioso. É que você não deve usar o construtor de BigDecimal que recebe um double. Experimente modificar seu programa para:

public class TesteCalculo {  
   
     private static BigDecimal d1;  
   
     public static void main(String[] args) {  
   
     d1 = new BigDecimal(29.9);  
   
   
     System.out.println(d1);  
   
     }  
   
 }
E

Para corrigir seu programa, faça:

public class TesteCalculo {  
   
     private static BigDecimal d1;  
   
     public static void main(String[] args) {  
   
     d1 = new BigDecimal("29.9");  
   
     d1 = d1.multiply(new BigDecimal(3));  
   
     System.out.println(d1);  
   
     }  
   
 }
esmiralha

E para nunca mais repetir esse erro em outros contextos, pesquise no Google como ocorre perda de precisão com uso de tipos de ponto flutuante no Java.

Criado 3 de dezembro de 2010
Ultima resposta 3 de dez. de 2010
Respostas 3
Participantes 3