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
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 ]