Senhores, tenho dois números Double, o primeiro é 9.96 e o segundo é 50.0
Gostaria de saber por que a multiplicação destes resulta em 498.00000000000006
Quando matematicamente deveria resultar em 498.0
Desde já agradeço…
Este lance está quebrando meu sistema de almoxarifado hahahaha
9.96*50.0 = 498.00000000000006 O que é isso?
6 Respostas
fala m0ska…
para valores financeiros, recomenda-se a utilização de BigDecimal
Brother, achei uma parada que resolve seu problema, não sei qual é a complexidade de alterar sua aplicação:
public static double truncate(double value) {
return Math.round(value * 100) / 100d;
}
O método trunca os valores até segunda casa decimal e arredonda se > 5 e etc…
Mas assim, dê uma olhada nesse post que pode te ajudar mais:
http://www.guj.com.br/posts/list/48264.java
Abraço.
Caras, eu utilizei Math.floor() e number format para deixar padronizado na apresentação.
Mas a minha pergunta é: de onde saiu esse 6 no final do número, pq matematicamente isto é impossível.
Será que java tem algum problema para calcular com números de ponto flutuante? pq o resultado matemático para este calculo é? 498.0
Caras, eu utilizeiMath.floor()e number format para deixar padronizado na apresentação.
Mas a minha pergunta é: de onde saiu esse 6 no final do número, pq matematicamente isto é impossível.
Será que java tem algum problema para calcular com números de ponto flutuante? pq o resultado matemático para este calculo é? 498.0
Computadores não tem precisão infinita para representar ou calcular todos os números possíveis, ainda mais os tipos de número de ponto flutuante do Java, que foram feitos para velocidade de cálculo, e não corretude.
Vc pode dar uma olhada aqui, explica o que está acontecendo com você:
http://www.jspbrasil.com.br/mostrar/47
E aqui também:
http://docs.sun.com/source/806-3568/ncg_goldberg.html
Valeu Allan, os artigos me ajudaram a entender isto.
O que eu não sabia é que calculos simples resultariam em uma inexatidam, mas eu vou passar a utilizar valores em bigDecimal quando precisar de precisao.
Muito obrigado a todos!