Erro: Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: "-153,15"
PS: -153,15 é o resultado da soma dá no calculo que estou a fazer
NumberFormatException é uma exceção que está diretamente associada ao valor que se tenta converter em número.
Veja, você tenta converter uma String (txtutlirdt.getText() retorna uma String) em Float (Float.parseFloat). O que ocorre é que os números com ponto flutuante são, para a tua versão da JVM, entendidos como os que contém o ponto (.), ou seja, seguem o padrão inglês, e não a vírgula (,) como o padrão português.
Assim sendo, sugiro que, como forma de evitar tal problema, você faça a conversão depois de substituir a vírgula por ponto.
Como?
Creio que isso funcione:
Agradeço a Resposta.
mas então retiro o NumberFormat?
Eu coloquei o NumberFormat para me limitar a 2 casas decimais!
agradeço a sua ajuda.
Obrigado
darlan_machado
Não, não.
O erro não tem a ver com o NumberFormat.
O que ocorre é que você tem, formatado ou não, uma String que é retornada pelo método getText() do component JTextField e isso nunca mudará.
O problema é que existem diferenças nos padrões inglês e português (inglês faz a separação dos decimais com ponto e português com vírgula).
A única solução para tais divergências é apelar para o replace e substituir a tal vírgula por ponto (quando lendo os dados) e vice-versa quando for apresentar o valor.
R
ricardo90
está a dar erro igual.
Confirme se o Float.parseFloat(txtutilrdt.getText().replace("\.", “,”)); está correto!
a Primeira virgula não está a faltar umas " "?
eu quero fazer SetText e não getText.
a txtutildiferenca é que vai receber o valor da soma e introduzir na BD
Obrigado
darlan_machado
Você está fazendo muitas coisas na mesma linha e está se perdendo.
Fica mais fácil identificar onde está o erro quando você desmembra o que está amontoado.
Não que não funcione empilhado, porém, é mais difícil de determinar o que está com problema.
P.S.: o replace se baseia em regex, logo, replace(".", “,”) pode não funcionar, ok? Será preciso analisar como criar uma regex que identifique o ponto e permita substituir o mesmo por vírgula.
Sim compila
o campo que vai receber o valor da txtutildiferenca na BD é Float!
R
ricardo90
já coloquei como você disse e continua a dar erro
darlan_machado
Me mostre qual a mensagem e em qual linha está ocorrendo o erro.
R
ricardo90
o erro da linha já resolvi.
o erro que esta a dar é ao inserir o resultado na BD
For input string: "-85,76"
este valor -85,76 é o valor que retoma a txtutildiferenca que vai inserir na bd
pelo que tenho de colocar o .replace na txtutildiferenca
darlan_machado
O banco de dados segue o mesmo padrão do java, cara.
Logo, você sim, terá que fazer replace para transformar o valor do padrão português para o inglês.
Faz parte do processo de trabalho de um desenvolvedor pensar.
R
ricardo90
já alterei isto no botão gravar
mod.setDiferenca (Float.parseFloat(txtutildiferenca.getText().replace("\,", “.”)));
mas mesmo assim nao dá
H
Heitor_Veloso
Faz o seguinte coloca o número no seu campo JTextField com .(ponto), verifica se ainda vai dar o erro, se não der o erro é por conta da vírgula, se der é por outra coisa, e então você vai saber melhor o que está acontecendo e depois como mudar.
staroski
Alguém traga um mito para esse oscar.
Você quer substituir um único caractere vírgula pelo caractere ponto, não precisa de expressão regular pra isso.