Como transformar String "10.098,29" em BigDecimal?

10 respostas
vitorkgb

Alguém saberia transformar uma String por exemplo “10.098,29” em BigDecimal??? pois puxo de um campo jTextField.

10 Respostas

pablosaraiva

String s1 = "10.098,19"; s1 = s1.replace(".", ""); s1 = s1.replace(",", "."); BigDecimal big1 = new BigDecimal(s1);

vitorkgb

isso não funciona!! Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException

pablosaraiva

Como não funciona?

Rodei aqui no java agora tranquilão.

Posta o código que você adaptou e não funcionou que posso te ajudar a achar o erro.

vitorkgb
Classe executável
ConectandoBDTeste cbdt = new ConectandoBDTeste();
        cbdt.cadastraValor("18.008,39");

Classe que contém o método

public void cadastraValor(String valor) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException
     {

            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
            con = DriverManager.getConnection(url, usuario, senha);
            statement = con.createStatement();

             valor = valor.replace(".", "");
             valor = valor.replace(",", ".");

            BigDecimal bd = new BigDecimal(valor);

            String query2 = "INSERT INTO VALORES(valor) VALUES (" + bd +")";

            statement.executeUpdate(query2);

    }
M

de uma forma mais polida

String s = "10.098,19";
		DecimalFormat format = new DecimalFormat();
		format.setCurrency(Currency.getInstance(new Locale("pt", "BR")));
		
		Double result = (Double) format.parse(s);
pablosaraiva

Pelo que vi você está utilizando o número para concatenar em uma string.

Não precisa transformar em BigDecimal.

Só prepara melhor a string e use ela mesma:

valor = valor.replace(".", "");  
    valor = valor.replace(",", ".");  
    String query2 = "INSERT INTO VALORES(valor) VALUES (" + valor +")";

Ou melhor ainda, utilize um PreparedStatement:

PreparedStatement ps = con.PrepareStatement("INSERT INTO VALORES(valor) VALUES (?)")
ps.setString(1, valor);
ps.executeUpdate();
pablosaraiva

Ao invés de substituir a vírgula e ponto na marra, pode utilizar o que o marcelux disse.

Eu não conhecia. Muito bom.

vitorkgb

é o do Marcelux ficou muito bom mesmo

pablosaraiva

Mas ainda assim, recomendo o uso de PreparedStatement.

eltonads

Aqui onde trabalho usamos assim:

String s = "10.098,19";  
NumberFormat df = NumberFormat.getNumberInstance();
   
Number result = (Number) df.parse(s); 
BigDecimal bd = new BigDecimal(result.doubleValue()).setScale(2, BigDecimal.ROUND_HALF_UP);

O NumberFormat.getNumberInstance() já pega o DecimalFormat para o Locale atual, ficando “internacionalizável” o código…
(Logicamente que não trato nenhuma possível exceção no snippet acima.)

Att.,

Criado 27 de novembro de 2009
Ultima resposta 27 de nov. de 2009
Respostas 10
Participantes 4