Nos documentos do Java 11BigDecimal
:
Quando um MathContext
objeto é fornecido com uma configuração de MathContext.UNLIMITED
precisão igual a 0 (por exemplo ), as operações aritméticas são exatas, assim como os métodos aritméticos que não levam MathContext
objetos. (Esse é o único comportamento que foi suportado em releases anteriores ao 5.)
Como corolário da computação do resultado exato, a configuração do modo de arredondamento de um MathContext
objeto com uma precisão de 0 não é usada e, portanto, irrelevante. No caso de divisão, o quociente exato pode ter uma expansão decimal infinitamente longa; por exemplo, 1 dividido por 3.
Se o quociente tiver uma expansão decimal não terminante e a operação for especificada para retornar um resultado exato, um ArithmeticException
será lançado. Caso contrário, o resultado exato da divisão será retornado, como feito para outras operações.
Para corrigir, você precisa fazer algo assim :
a.divide(b, 2, RoundingMode.HALF_UP)
onde 2 é a escala e RoundingMode.HALF_UP está no modo de arredondamento
Para mais detalhes, consulte esta postagem no blog .
precision
; ele éscale
. Por favor, veja docs.oracle.com/javase/7/docs/api/java/math/...Porque você não está especificando uma precisão e um modo de arredondamento. O BigDecimal está reclamando que poderia usar 10, 20, 5000 ou casas decimais infinitas e ainda assim não seria capaz de fornecer uma representação exata do número. Então, em vez de fornecer a você um BigDecimal incorreto, ele apenas se irrita.
No entanto, se você fornecer um RoundingMode e uma precisão, ele poderá converter (por exemplo, 1.333333333 para infinito para algo como 1,3333 ... mas você, como programador, precisa dizer com que precisão está satisfeito '
fonte
Você pode fazer
Você pode escolher o número de bits que deseja 32,64,128.
Confira este link:
http://edelstein.pebbles.cs.cmu.edu/jadeite/main.php?api=java6&state=class&package=java.math&class=MathContext
fonte
Para corrigir esse problema, usei o código abaixo
2 é precisão. Agora o problema foi resolvido.
fonte
precision
; ele éscale
. Por favor, consulte docs.oracle.com/javase/7/docs/api/java/math/…Eu tive esse mesmo problema, porque minha linha de código era:
Eu mudo para isso, lendo a Resposta anterior, porque não estava escrevendo precisão decimal:
4 é Precisão Decimal
AND RoundingMode são constantes Enum, você pode escolher qualquer uma dessas
UP, DOWN, CEILING, FLOOR, HALF_DOWN, HALF_EVEN, HALF_UP
Nesse caso, HALF_UP, terá este resultado:
Você pode verificar as
RoundingMode
informações aqui: http://www.javabeat.net/precise-rounding-of-decimals-using-rounding-mode-enumeration/fonte
É uma questão de arredondar o resultado, a solução para mim é a seguinte.
fonte
Resposta para BigDecimal lança ArithmeticException
Adicione o objeto MathContext à sua chamada ao método de divisão e ajuste a precisão e o modo de arredondamento. Isto deve corrigir o seu problema
fonte
Seu programa não sabe qual precisão os números decimais devem usar;
Solução para ignorar a exceção:
fonte