11

我找不到为什么我有一段 java.lang.ArithmeticException: Invalid operation时间使用大十进制。

public static String E (int exponent, String value){
BigDecimal ten= new BigDecimal("10");
BigDecimal tempValue=new BigDecimal (value);
return tempValue.multiply(ten.pow(exponent)).toString();
}

一些指数具有诸如 的值-27。有什么办法可以解决这个问题,因为很难用许多零存储原始值。我选择了BigDecimal,因为我需要精确。

谢谢

4

2 回答 2

10

如果要将事物提高到负指数,则必须指定 a MathContextinBigDecimal.pow(int, MathContext)以便它知道要使用多少精度 - 否则,BigDecimal将尝试将其计算为无限精度,这对于某些值是不可能的。

(除非您可以绝对确定您正在执行的操作具有有限位数的精确结果。)

于 2012-03-29T19:38:52.563 回答
3

要将 BigDecimal 乘以 10 的幂,使用movePointLeftand对读者来说可能更清楚(也更有效) movePointRight

而不是tempValue.multiply(ten.pow(exponent))你会使用tempValue.movePointRight(exponent).

于 2012-03-29T21:58:53.177 回答