Meh*_*hdi 36 java rounding bigdecimal
我想设置两个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);
Run Code Online (Sandbox Code Playgroud)
当我运行时,我有这个例外:
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)
Run Code Online (Sandbox Code Playgroud)
为什么需要舍入?如果我不想解决,请问什么是解决方案?
谢谢
bra*_*ain 34
您有两个BigDecimal数字,这两个数字都需要超过1000个小数位.试图将比例设置为仅有113个小数位意味着您将失去精度,因此您需要舍入.
您可以使用采用RoundingMode的setScale方法来防止异常,但不能使用舍入.
Ako*_*tha 14
尝试使用setScale方法的roudingMode.
就像是:
BigDecimal aa = a.setScale(i+j, BigDecimal.ROUND_HALF_DOWN);
Run Code Online (Sandbox Code Playgroud)
舍入是必要的.
在Javadoc中的BigDecimal,它说BigDecimal被表示为(×unscaledValue 10 进制),其中unscaledValue是一个arbitatrily长整数和规模是一个32位的整数.
2.6*10 -1095需要至少1096的比例才能准确表示.它不能用(任何整数)*10 -113准确表示.因此,您需要提供一个roundingMode.
| 归档时间: |
|
| 查看次数: |
56805 次 |
| 最近记录: |