Erro em String? [RESOLVIDO]

Bom dia, estou tentando pegar uma String de um campo de texto e manipular esse valor. Como eu sei que é uma String, eu convertir para double , mas ta dando erro na hora de pegar ela. Segue o código:

public void total_caixa(){
    String soma = null;
    double soma2 = 0;
    String retirada = null;
    double retirada2 = 0;
    double total = 0;
    String total2 = null;
    
    soma = txtSoma.getText();
    System.out.println(soma);
    retirada = txtRetirada.getText();
    
    soma2 = Double.parseDouble(soma);
    retirada2 = Double.parseDouble(retirada);
    
    total = soma2 - retirada2;
    total2 = Double.toString(total);
    System.out.println(total2);
        txtTotal.setText(String.format("%.2f", total2));
}

esse é o erro

Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: “3750,00”
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at vendas.FrmVendasDetalhadas.total_caixa(FrmVendasDetalhadas.java:169)
at vendas.FrmVendasDetalhadas.jButton1ActionPerformed(FrmVendasDetalhadas.java:726)
at vendas.FrmVendasDetalhadas.access$1900(FrmVendasDetalhadas.java:38)
at vendas.FrmVendasDetalhadas$18.actionPerformed(FrmVendasDetalhadas.java:550)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)

Ao invés de digitar 3700,00 (decimal com vírgula) tenta usar o separador decimal do inglês: o ponto “.”

Ou se quiser contiunar digitando com a vírgula, é só usar um replace na variável soma e retirada:

    ...
    soma2 = Double.parseDouble(soma.replace(",", "."));
    retirada2 = Double.parseDouble(retirada.replace(",", "."));
    ...
1 curtida

Double.parseDouble só aceita o ponto como separador decimal, então uma alternativa é trocar a vírgula por ponto, como já disseram anteriormente.

Outra alternativa é usar java.text.NumberFormat:

NumberFormat nf = NumberFormat.getInstance(new Locale("pt", "BR"));

double valor = nf.parse("3750,00").doubleValue();
// também aceita o separador de milhares
double valor2 = nf.parse("1.234.000,00").doubleValue();

O Locale controla os aspectos de localização (separador de milhares e casas decimais, entre outros), então basta usar “pt-BR” (português do Brasil) para que ele use a vírgula como separador decimal.

1 curtida

Amigos muito obrigado , o Replace funcionou certinho. :smile: