Bom dia, estou criando um programa financeiro pessoal, é bem simples, porem nao consigo completar por um erro que não não consigo achar uma solução a dias.
é o seguinte, tenho uma classe com get e sets, os dados que o usuário insere são salvos em uma ArrayList e depois em um arquivo… mas quando vou salvar um valor (double) exemplo: R$ 10,000.00 , da um erro ( Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: ) , alguém tem alguma dica?
[RESOLVIDO]Erro ao salvar valor double
8 Respostas
double não conhece números com vírgulas, como a notação do mesmo não segue o padrão brasileiro, você deve substituir a vírgula por ponto.
Um replace ou replaceAll deve funcionar perfeitamente,
Já tentei ReplaceAll, e replace … segue dando o mesmo erro…
O erro aparece quando vou acionar o evento do botão “Salvar”, onde esta o codigo que pega a informção dos jTextFiled e salva na ArrayList,
Isso
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string:
Indica que você está passando um formato inválido de número para uma variável que representa um dado numérico.
Em outras palavras:
Tenta passar uma String vazia: “”
Tenta passar letras: “Avgrgth”
Tenta passar caracteres especiais: “!@#$%¨&*()_+/~^;:”
Tenta passar virgula: “10,01”
Tenta passar algo que não seja um destes: “[telefone removido].”
Falando de outro modo, você está cometendo erro na programação.
Aqui esta o codigo do botao, estou fazendo o teste so com um campo, (tfBois) não sei mais oq arrumar para dar certo…
Dados1 dad = new Dados1();
if (pos!=-1) {
dad = dados.get(pos);
dados.remove(pos);
dad.setAno((String) jcAno1.getSelectedItem());
dad.setFrigorifico(tfFrigorifico.getText());
dad.setMes((String) jcMes.getSelectedItem());
dad.setBois(Double.parseDouble(tfBois.getText()));
dados.add(dad);
new Arquivo().salvaDados1(dados);
pos=-1;
JOptionPane.showMessageDialog(null,"Salvo com sucesso !");
}
else{
dad.setAno((String) jcAno1.getSelectedItem());
dad.setFrigorifico(tfFrigorifico.getText());
dad.setMes((String) jcMes.getSelectedItem());
dad.setBois(Double.parseDouble(tfBois.getText()));
dados.add(dad);
new Arquivo().salvaDados1(dados);
JOptionPane.showMessageDialog(null,"Salvo com sucesso !");
}
Onde está o replace/replaceAll?
dad.setBois(Double.parseDouble(tfBois.getText()));
Eu isolaria o valor obtido do campo tfBois em uma String e, então, procederia com a atribuição de valor.
Veja o meu exemplo:
public class Teste{
public static void main(String[] args){
String valor = "1000,00";
double db = Double.parseDouble(valor.replace(",", "."));
System.out.println("Valor de db: " + db);
}
}
Isso, o replaceAll ou replace eu coloco aqui, foi onde fiz os testes que não deram certo:
dad.setBois(Double.parseDouble(tfBois.getText().replaceAll(",", ".")));
Ah, e uma outra obs, o problema não apenas com a virgula, é com o ponto também, por mais que seja double se eu inserir um valor exemplo: 10.0 também da o erro… sendo que o get e set estão em double.
Opa solucionei o problema drsmachado, muito obrigado pela ajuda!
isolei o valor das jTextField em Strings separadas, e deu certo! 