Galera agora estou fazendo o processo inverso, estou convertendo uma String com de conteúdo = 1.000,00 ou 1.989.350,50 ou mesmo 10,00 para BigDecimal?
estou tentando algumas formas e nada!
Galera agora estou fazendo o processo inverso, estou convertendo uma String com de conteúdo = 1.000,00 ou 1.989.350,50 ou mesmo 10,00 para BigDecimal?
estou tentando algumas formas e nada!
O problema é que a String está com o formato Brasil (o que dá problema no BigDecimal).
Uma forma de fazer isso é antes de jogar a String no BigDecimal, é converte-la para valor padrão internacional, ao invés da virgula seria o .). Dá para fazer isso manipulando a String de uma forma relativamente fácil
Obrigado Jair, Consegui fazendo o seguinte!
public BigDecimal recuperaString(String str) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException, ParseException
{
str = str.replace(".","");
str = str.replace(",", ".");
str = str.trim();
return new BigDecimal(str);
}
exemplo: 1.000.000,00 —> 1000000.00
Depois pra recuperar faço o processo de:
public String recuperaValorBigDecimal(BigDecimal bigDecimal) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException, ParseException
{
DecimalFormat decFormat = new DecimalFormat("#,###,##0.00");
return decFormat.format(bigDecimal);
}
Funcionou perfeito!
É isso ai Vitor. Parabéns cara e obrigado por postar a solução para as pessoas pesquisarem no futuro, é assim mesmo que o fórum deve ser.
Pode deixar esse método dentro de uma classe utilitaria (ele inclusive por ser estático).
Claro, se fosse em Ruby, ai ao invés de uma classe o ideal seria colocar em um módulo, mas isso é uma outra história
Não precisa manipular a String, pode usar o mesmo numberformat q vc usa pra formatar o numero
Locale Local = new Locale("pt","BR");
//Number pra string
double value = 2637.64;
DecimalFormat df = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(Local));
String s = df.format(value);
System.out.println(s);//imprime 2.637,64
//Contrário
String number = "2.637,64";
try {
System.out.println(df.parseObject(number)); // vai retornar um double, 2637.64
} catch (ParseException e) {
e.printStackTrace();
}
Cara por favor diminui esse throws ai, use somente uma exception, crie uma se for o caso, pq isso ai vai deixar o codigo muito poluido.