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
[code]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);
}
}[/code]
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?
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);
}
}
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);
}
}
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.