Como usar o BigDecimal corretamente [Resolvido]

5 respostas
F

Tenho o seguinte codigo:

public static void main(String[] args) { BigDecimal a = new BigDecimal("2.5"); BigDecimal b = new BigDecimal("0.3"); System.out.println(a.divide(b)); }Porém ao rodar ele eu obtive o seguinte erro:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.Pelo que entendi ele não conseguiu achar uma representação exata do decimal, só naõ entendi o pq dele não ter conseguido gerar isso corretamente?
Como faço para fazer essa divisão usando o BigDecimal?

5 Respostas

F

Usa o método divide com dois parâmetros:

a.divide(b, MathContext.X);
E

Números que ao serem divididos provocam a formação de uma dízima periódica ( exemplo: 8.3333333333333333333333333333333… ) irão provocar esses erros, portanto na prática nunca se usa o método ‘divide’ que tem apenas um parãmetro, que é o que você está querendo usar. Na prática não use isso, a menos que você possa provar que o resultado da divisão não irá causar uma dízima periódica.

Usa-se sempre algum dos outros 5 métodos divide:

http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html

F

Eu usei o

a.divide(b, MathContext.X);

Era isso mesmo que eu precisava, valeu.
Muito obrigado.

F

Por nada.
A resposta do entanglement também pode ser bem aproveitada.

jamesfrj

Só para complementar, para mim funcionou dessa forma:

public class TestaBigDecimal {
	public static void main(String[] args) {
		BigDecimal a = new BigDecimal(5.76);
		BigDecimal b = new BigDecimal(4.43);
		System.out.println(a.divide(b, MathContext.DECIMAL32));
	}
}

Ainda tem outros formatos que permitem maior número de casas decimais: DECIMAL64, DECIMAL128 e UNLIMITED.

Abraços

Criado 5 de março de 2012
Ultima resposta 6 de jul. de 2012
Respostas 5
Participantes 4