Boa tarde.
tenho um problema a inserir um valor no banco de dados através de uma Jtextfield.
alguem pode ajudar?
codigo que tenho feito :
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
float a;
a=(Float.parseFloat(txtutilccaixa.getText()) - Float.parseFloat(txtutilrdt.getText()));
txtutildiferenca.setText(String.valueOf(nf.format(a)));
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:
Float.paserFloat(txtutilrdt.getText().replace("\\.", ","));
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
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.
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
Você está fazendo muitas coisas na mesma linha e está se perdendo.
float a;
String valCaixa = txtutilccaixa.getText();
String valRdt = txtutilrdt.getText();
float rdt = Float.parseFloat(valRdt.replace(".", ","));
float caixa = Float.parseFloat(valCaixa.replace(".", ","));
a = caixa - rdt;
txtutildiferenca.setText(String.valueOf(nf.format(a)));
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.
Continua dando erro
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: "145,36"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
meu codigo:
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
float a;
String valCaixa = txtutilccaixa.getText();
String valRdt = txtutilrdt.getText();
float rdt = Float.parseFloat(valRdt.replace(".", “,”));
float caixa = Float.parseFloat(valCaixa.replace(".", “,”));
a = caixa - rdt;
txtutildiferenca.setText(String.valueOf(nf.format(a)));
Desculpe estar a ser chato mas precisava mesmo de resolver isso
Obrigado
Cara, foi mal.
Eu me equivoquei no replace, você quer tirar a vírgula e não o ponto.
O certo será:
.replace(",", “.”);
Isso está correto? confirme porque está a dar erro na linha
O que me parece é que o erro não vem dai
java.lang.NumberFormatException: For input string: “200,29”
Vem de onde então, cara? Se você sabe tanto, por que está perguntando?
public class Replace {
public static void main(String args[]) {
String x = "123,44";
String z = x.replace(",", ".");
System.out.println(z);
float w = Float.parseFloat(z);
System.out.println(z + " " + w);
}
}
Veja se esse código não compila.
Sim compila
o campo que vai receber o valor da txtutildiferenca na BD é Float!
já coloquei como você disse e continua a dar erro
Me mostre qual a mensagem e em qual linha está ocorrendo o erro.
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
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.
já alterei isto no botão gravar
mod.setDiferenca (Float.parseFloat(txtutildiferenca.getText().replace("\,", “.”)));
mas mesmo assim nao dá
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.
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.
String texto = txtutildiferenca.getText().replace(',', '.');
float valor = Float.parseFloat(texto);
mod.setDiferenca(valor);