Efetuar um calculo em um bigDecimal

Gente sou novata em programacao e estou apanhando um pouco em fazer uma soma em um bigDecimal q eu tenho veja so
tenho a variavel bd = (BigDecimal) df2.parse (text);
eu precisava pegar o valor de bd e tirar 20% dele ! tentei fazer bd *= 0.2 mas ele n aceita pois um double n pode operar usando *!
o que posso fazer minha gente? agradeco desde ja a atencao de todos vcs obrigadinhaaaaaaa!

[code]String sValor = “123456789”;

BigDecimal valor = new BigDecimal(sValor);

BigDecimal vintePctDeValor = valor.multiply(new BigDecimal(“0.2”));

BigDecimal valorMenosVintePct = valor.subtract(vintePctDeValor);
// que é a mesma coisa que 80%
BigDecimal valorMenosVintePct = valor.multiply(new BigDecimal(“0.8”));

[/code]

só reforçando : nunca utilize double com BigDecimal

Nunca ! use o construtor que recebe double.
Sempre use o que recebe String e escreve os numeros dentro de String como fez o Bruno.
Não é uma questão de boa prática (ok, é). É uma questão de funcionar direito.

veja so deu certissimo mas fico um 1 pequeno probleminha veja so
quando passo o valor ex: 90,00 ele faz a conta e aparece 18,000, contendo um 0 a mais ai fis isso

jt_limite.setText(vintePctDeValor.toString().replace(".0", ","));

ai quando faco a soma ele da certinho ele calcula 18,00 poreeeeeeeeeeem se eu passa 9,00 por parametro pra ele somar ele me retorna 1.800

obviamente ele n vai tirar o 0 pq n tem .0 o q faco para solucionar essa logica? obrigada pela atencao! brigada mesmo!

Se você precisa fazer contas e mostrar com 2 dígitos após a vírgula, você não deve fazer isso que você fez. Você precisa usar java.text.DecimalFormat. Exemplo (no código abaixo estou supondo que você esteja usando o Windows em português.)
Também estou supondo que você use todos os “try/catches” necessários - estou pulando isso só para simplificar)

String s = "1.234,56"; // formato brasileiro, com pontos e vírgulas, não se esqueça disto
DecimalFormat df = new DecimalFormat ("#,##0.00");
df.setParseBigDecimal (true); // aqui o pulo do gato
BigInteger bi = (BigDecimal) df.parse (s); // deve voltar o BigDecimal "1234.56"
// Vamos somar mais 1 real.
bi = bi.add (new BigDecimal ("1"));
System.out.println (df.format (bi)); // deve imprimir "1.235,56" como esperado.

Se não for o Windows em português, em vez de “new DecimalFormat (”#,##0.00") você precisa usar:

.... new DecimalFormat ("#,##0.00", new DecimalFormatSymbols (new Locale ("pt", "BR")));

Resolveu meu problema, obrigado pela solução!

Eu tratei como String, usei double para os calculos, formatei para String de novo, onde a aplicação pede um BigDecimal eu apenas crio um novo Big passando a String :slight_smile: