Trabalhando com BigDecimal

Galera, eu fiz um programinha aqui. O cara entra com os valores ai eu faço o calculo de uma formula (GRANDE) e retorno o valor.
Simples, mas como os valores são ou muito pequenos ou muito grandes quando eu retorno o Double as vezes minha resposta vira um ‘NaN’ ao invés do número. Pelo que eu entendi e pesquisei o Double não consegue representar a faixa de valores que eu to trabalhando.

Como eu usei interface gráfica, eu pego o valor no ''txt.getText()" e faço um Double.parseDouble(txt.getText() ) ;
Eu tava jogando esse valor em um Double. Tentei usar o bigDecimal, mas não consegui.

Ele tem como métodos o ‘valueof’, que pode receber um double. Como eu faço pra jogar os valores do txt no BigDecimal ?
Eu posso fazer as operações normalmente com valores desse tipo, por exemplo ‘*’, ‘/’ etc ?

No aguardo.

Valeu.

pra criar um BigDecimal via string ??

new BigDecimal(valorEmString);

no seu caso

BigDecimal value = new BigDecimal(txt.getText());

operações em bigdecimal são assim

BigDecimal soma = value.add(otherValue); // value + otherValue BigDecimal subtracao = value.subtract(otherValue); // value - otherValue; BigDecimal multiplicacao = value.multiply(otherValue); // value * otherValue; BigDecimal divisao = value.divide(otherValue); // value / otherValue

cria pelomenos uma variável BigDecimal aux … e a use como auxiliar nos calculos…

boa sorte

mais informações aqui => http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html

3 curtidas

Obrigado pela ajuda.

O problema que tenho constantes na formula, e outras operações como logaritimo.

Não tem como multiplicar um BigDecimal por uma constante: ‘3.7’ por ex.
Eu teria que converter esse valor ?

valor1 = valor1.valueOf(3.7) ;
Onde valor1 é um BigDecimal… daria certo ?

digamos q vc tenha um bigdecimal value, e queira multiplicar ele por uma constante chamada CONST

value.multiply(new BigDecimal(CONST));

se não quiser ficar escrevendo isso tudo…crie um método auxiliar

public BigDecimal toBig(double value) { return new BigDecimal(value); }

ai da pra fazer assim

value.multiply(toBig(CONST)); // <== axo melhor isso que ficar escrevendo new toda hora

Blz. Eu tinha resolvido isso com o método valueOf, ele faz a mesma coisa pelo que eu entendi.

Agora to tentando usar o Log, o método da classe Math, recebe apenas valores double.
Se eu converter o BigDecimal não vai adiantar, certo?

vai perder precisão… leia a api de bigdecimal… pra ver como fazer… existe 1 framework pra usar numeros grandes chamado JQuanty algo assim…