Problemas com multiplicação de tipo inteiro com tipo double

Bom dia galera, tenho uma tela aqui que contem 3 textfield, um para quantidade, o outro para preço, e o outro para total que recebe a quantidade x o preço, e um botão chamado calcular, mas to com um problema aqui, caso eu digite 6 ou 7 para quantidade e um preço de 10.95, quando clico no botão calcular o valor total aparece como 99999999, será por que???
vou postar o código que faz o calculo.

int quantidade = Integer.parseInt(tf_quantidade.getText());
double preco = Double.parseDouble(tf_preco.getText());
double total = (quantidade * preco);

[quote=Anderson S.]Bom dia galera, tenho uma tela aqui que contem 3 textfield, um para quantidade, o outro para preço, e o outro para total que recebe a quantidade x o preço, e um botão chamado calcular, mas to com um problema aqui, caso eu digite 6 ou 7 para quantidade e um preço de 10.95, quando clico no botão calcular o valor total aparece como 99999999, será por que???
vou postar o código que faz o calculo.

int quantidade = Integer.parseInt(tf_quantidade.getText());
double preco = Double.parseDouble(tf_preco.getText());
double total = (quantidade * preco);

[/quote]

isso era para dá certo sim, tenta assim:

int quantidade = Integer.parseInt(tf_quantidade.getText());
double preco = Double.parseDouble(tf_preco.getText());
double total = ( quantidade * 1.0 * preco);
tf_total.setText(total+"");

Já tentou usar o depurador?

E como vc está imprimindo esse valor?

Pelo tipo de erro, dá a impressão que ele está usando:

tf_total.setText ("99999999");

Eu esperaria que aparecesse algo como “65.699999998” ou “65.70000000002” ou coisa parecida. Mas isso parece ser resto de um código de teste que foi posto lá só para ver se estava funcionando :slight_smile:

O que pode estar é imprimindo isso, mas o TextField ser pequeno, alinhado a direita e o resto do número estar escondido.

Ai galera eu errei na descrição do enunciado, ta imprindo não é 999999, e sim 76.649999999, caso eu entre com uma quantidade de 7, então o problema é como arredondar esse valor para —>>> 76.65 <<<—, isso que tenho que resolver… como eu faço???
Ai galera, foi mal por ter errado no enunciado…

Obrigado!

recomendo você usar a perpectiva de debug para verificar o que acontece no seu código.

ou então posta o código para podermos verificar.

[quote=Anderson S.]Ai galera eu errei na descrição do enunciado, ta imprindo não é 999999, e sim 76.649999999, caso eu entre com uma quantidade de 7, então o problema é como arredondar esse valor para —>>> 76.65 <<<—, isso que tenho que resolver… como eu faço???
Ai galera, foi mal por ter errado no enunciado…

Obrigado![/quote]

Se quiser que apareçam 7 casas depois da vírgula, no máximo, faça algo como:

double valor = .....;
DecimalFormat df = new SimpleDecimalFormat ("#0.#######"); // veja que pus 7 "#" depois do "."
tf_total.setText (df.format (valor)); // deve imprimir "76.65" como esperado.

Tenta fazer um casting de INT sobre a chamada… talvez funcione!

Isso ocorre por causa disso aqui: http://www.guj.com.br/posts/list/84121.java#448928

Uma das soluções mais recomendadas aqui é utilizar a classe BigDecimal. Veja o artigo:
http://blog.caelum.com.br/2010/07/15/arredondamento-no-java-do-double-ao-bigdecimal/

[quote=Anderson S.]Ai galera eu errei na descrição do enunciado, ta imprindo não é 999999, e sim 76.649999999, caso eu entre com uma quantidade de 7, então o problema é como arredondar esse valor para —>>> 76.65 <<<—, isso que tenho que resolver… como eu faço???
Ai galera, foi mal por ter errado no enunciado…

Obrigado![/quote]

você pode arredondar usando DecimalFormat, assim:

double valor = 76.649999999; new DecimalFormat("00,00").format(valor)

vou testar;;

Sim. Mas não deixe de ler os artigos que indiquei. É importante compreender bem o problema.
E o double para valores monetários podem gerar imprecisões ainda maiores, na casa dos centavos.

Sim senhor, é que não fiquei olhando seu programa com muita atenção. Pus um nome qualquer (pelo menos não usei “x” :slight_smile: ) e confiei em você.

Ai galera, ta convertendo agora, mas ta com um problema, to textfield ta aparcendo 76,65, e ta dando erro por causa da virgula… como faz para não aparecer a vírgula?? e sim um ponto “.”

double valor = .....;  
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance (Locale.US));
DecimalFormat df = new DecimalFormat ("#0.#######", dfs);
tf_total.setText (df.format (valor)); // deve imprimir "76.65" como esperado.  

double valor = 76.649999999; new DecimalFormat("00.00").format(valor)

[quote=ViniGodoy]Isso ocorre por causa disso aqui: http://www.guj.com.br/posts/list/84121.java#448928

Uma das soluções mais recomendadas aqui é utilizar a classe BigDecimal. Veja o artigo:
http://blog.caelum.com.br/2010/07/15/arredondamento-no-java-do-double-ao-bigdecimal/[/quote]
Nesse artigo tem um exemplo de dividir, utilizando bigDecimal, como faz para miltiplicar utilizando ele??

Ai entanglement deu certinho cara, ta aparecendo com o ponto"." agora, valeu mesmo…
Obrigado a todos, qualquer coisa aviso…

[quote=Anderson S.][quote=ViniGodoy]Isso ocorre por causa disso aqui: http://www.guj.com.br/posts/list/84121.java#448928

Uma das soluções mais recomendadas aqui é utilizar a classe BigDecimal. Veja o artigo:
http://blog.caelum.com.br/2010/07/15/arredondamento-no-java-do-double-ao-bigdecimal/[/quote]
Nesse artigo tem um exemplo de dividir, utilizando bigDecimal, como faz para miltiplicar utilizando ele??[/quote]

Cara, multiplicar é bem mais fácil que dividir. O exemplo dado, de divisão, é porque ela é a operação que é de longe a mais complicada de todas; as outras, se você olhar o Javadoc, são muito simples.

http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#multiply(java.math.BigDecimal)