我想设置两个BigDecimal数字a
和b
的比例。如在这个例子中:
BigDecimal a = new BigDecimal("2.6E-1095");
BigDecimal b = new BigDecimal("2.7E-1105");
int i = 112, j=1;
BigDecimal aa = a.setScale(i+j);
BigDecimal bb = b.setScale(i+j);
当我跑步时我有这个例外:
java.lang.ArithmeticException: Rounding necessary
at java.math.BigDecimal.divideAndRound(BigDecimal.java:1439)
at java.math.BigDecimal.setScale(BigDecimal.java:2394)
at java.math.BigDecimal.setScale(BigDecimal.java:2437)
为什么需要舍入?如果我不想解决,请问什么是解决方案?
由于
答案 0 :(得分:31)
您有两个BigDecimal数字,这两个数字都需要超过1000个小数位。试图将比例设置为仅有113个小数位意味着您将失去精度,因此您需要舍入。
您可以使用采用RoundingMode的setScale方法来防止异常,但不能使用舍入。
答案 1 :(得分:14)
尝试使用setScale方法的roudingMode。
有些事情:
firefox_capabilities['binary']
答案 2 :(得分:5)
舍入是必要的。
在javadoc for BigDecimal中,它表示BigDecimal
表示为(unscaledValue×10 -scale ),其中unscaledValue
是一个任意长整数,且scale是a 32位整数。
2.6 * 10 -1095 需要至少1096的标度才能准确表示。它不能用(任何整数)* 10 -113 准确表示。因此,您需要提供roundingMode
。