String para Double

Bom pessoal é o seguinte

estou escrevendo um programa que pede para o usuário 2 números com casas decimais 0,00

o problema é que quando coloco o número quebrado 0,00

ele da um erro

ava.lang.NumberFormatException: 55,5

at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1213)

at java.lang.Double.parseDouble(Double.java:201)

at Combustivel.main(Combustivel.java:36)

Bom o programa esta abaixo

import java.text.DecimalFormat;

import javax.swing.JOptionPane;





public class Combustivel {

public static void main(String args[]) {



double tanqCont = 0 , // contador de tanques

kmCont = 0 , // contador de quilometragem

tanqValor, // valor dos tanques

kmValor, // valor das quilometragens

somaTanq = 0, // soma dos tanques

somaKm = 0, // soma das quilometragens

media = 0; // média Km/l



String entradac , // String de entrada de nota do usuário

entradakm; // String para entrada de Km





// Fase de Processamento







entradac = JOptionPane.showInputDialog( " Entre com o valor de litros,-1 para sair ");

entradakm = JOptionPane.showInputDialog( " Entre com o valor de quilometragem , -1 para sair");



double d = Double.parseDouble(entradac);





tanqValor = Double.parseDouble(entradac);

kmValor = Double.parseDouble(entradakm);





while ( tanqValor != -1) // Enquanto variável tanqValor for diferente de -1(sentinela)

{



somaTanq = somaTanq + tanqValor; // somatória dos valores de combustível

tanqCont ++; // adicionando 1 ao contador comb.



somaKm = somaKm + kmValor; // somatória dos valores de quilometragem

kmCont ++; // adiciona 1 ao contador km





entradac = JOptionPane.showInputDialog( " Entre com o valor de litros, " );

entradakm = JOptionPane.showInputDialog( " Entre com o valor de quilometragem , -1 para sair");





tanqValor = Double.parseDouble(entradac);

kmValor = Double.parseDouble(entradakm);





}



// Fase de conclusão





DecimalFormat twoDigits = new DecimalFormat ("0.00"); // cria Objeto para a String sair com 2 casas decimais



if (tanqCont != 0 )

{

media = (double) somaKm / somaTanq; // calculo da média



JOptionPane.showMessageDialog

( null , " A média dos tanques é : " + twoDigits.format (media) + "n" +

"Litros de combustível = " + twoDigits.format( somaTanq ) + "n" +

"Quilometragem Total = " + twoDigits.format( somaKm ) + "n" +

"Somatória de tanques = " + kmCont , "Média dos tanques", JOptionPane.INFORMATION_MESSAGE);



}



else



JOptionPane.showMessageDialog

(null, "Dados incompletos para cálculo ", "Media dos Tanques", JOptionPane.INFORMATION_MESSAGE );



}

}





quem puder me ajudar eu agradeço muitissimo !!!

Obrigado

Experimente substituir 0,00 por 0.0 ou seja a virgula por um ponto .





Volnei Granado Munhoz :wink:

Engraçado… eu testei o seu programa usando a seguinte versão de Java:



java version "1.4.1_01"

Java™ 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)

Java HotSpot™ Client VM (build 1.4.1_01-b01, mixed mode)



E funcionou. Eu achava que não era para funcionar. Quem se habilita a explicar? Será que é o Locale? Estou usando a versão de Java para todos os idiomas. Vou ver a documentação da classe DecimalFormat agora. E, thiago_louzada, que versão vc está usando?



valeuz…



jack_-ganzha



[ Esta mensagem foi editada por: jack
-_ganzha em 12-03-2003 17:32 ]

é estranho mas a versão é a mesma que a sua

estou baixando a nova

usei o Eclipse para fazer esse programa

!!!

A propósito troquei a virgula por ponto e não rolou …

deu o mesmo erro mensionado

[ Esta mensagem foi editada por: thiago_louzada em 12-03-2003 17:47 ]

Eu acabei de testar com a seguinte versão:



java version "1.3.1"

Java™ 2 Runtime Environment, Standard Edition (build 1.3.1-b24)

Java HotSpot™ Client VM (build 1.3.1-b24, mixed mode)



E tambem não deu erro. O Locale para o Brasil é com "," mesmo. Basta rodar essa classe sugerida na Documentação para ver os Locales disponiveis.



import java.text.*;

import java.util.Locale;

public class Local {

public static void main(String[] args) {

Locale[] locales = NumberFormat.getAvailableLocales();

double myNumber = -1234.56;

NumberFormat form;

for (int j=0; j<1; ++j) {

System.out.println("FORMAT");

for (int i = 0; i < locales.length; ++i) {

if (locales[i].getCountry().length() == 0) {

continue; // Skip language-only locales

}

System.out.print(locales[i].getDisplayName());

switch (j) {

case 0:

form = NumberFormat.getInstance(locales[i]); break;

case 1:

form = NumberFormat.getIntegerInstance(locales[i]); break;

case 2:

form = NumberFormat.getCurrencyInstance(locales[i]); break;

default:

form = NumberFormat.getPercentInstance(locales[i]); break;

}

if (form instanceof DecimalFormat) {

System.out.print(": " + ((DecimalFormat) form).toPattern());

}

System.out.print(" -> " + form.format(myNumber));

try {

System.out.println(" -> " + form.parse(form.format(myNumber)));

} catch (ParseException e) {

System.out.println("nException: " + e.getClass().getName() + "n");

}

}

}

}

}



Agora, thiago, poste novamente o erro com o codigo exatamente igual ao daqui. Assim a gente pode ver em que linha está. Acho que vc inseriu algum comentario ou uma quebra de linha e aí a linha em que a exception está ocorrendo está em branco.



valeuz…

[ Esta mensagem foi editada por: jack_-_ganzha em 12-03-2003 18:14 ]