[RESOLVIDO]Erro ao salvar valor double

8 respostas
M

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?

8 Respostas

D

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,

M

Já tentei ReplaceAll, e replace … segue dando o mesmo erro…

M

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,

D

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.

M

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 !");


            }
D

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);
	}
}
M

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.

M

Opa solucionei o problema drsmachado, muito obrigado pela ajuda!

isolei o valor das jTextField em Strings separadas, e deu certo! :smiley:

Criado 27 de junho de 2012
Ultima resposta 27 de jun. de 2012
Respostas 8
Participantes 2