Alguém saberia transformar uma String por exemplo “10.098,29” em BigDecimal??? pois puxo de um campo jTextField.
Como transformar String "10.098,29" em BigDecimal?
10 Respostas
String s1 = "10.098,19";
s1 = s1.replace(".", "");
s1 = s1.replace(",", ".");
BigDecimal big1 = new BigDecimal(s1);
isso não funciona!! Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException
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.
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);
}
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);
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();
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.
é o do Marcelux ficou muito bom mesmo
Mas ainda assim, recomendo o uso de PreparedStatement.
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.,