Como converter uma String formatada de 1.000,00 para BigDecimal?

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!

2 curtidas

É 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 :slight_smile:

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.