java BigDecimal算术异常无效操作

java BigDecimal算术异常无效操作,java,bigdecimal,largenumber,Java,Bigdecimal,Largenumber,我找不到为什么我在使用大十进制时得到了一个java.lang.arithmetricException:无效操作 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();

我找不到为什么我在使用大十进制时得到了一个
java.lang.arithmetricException:无效操作

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,因为我需要精确


谢谢你

如果你要将事物提升到负指数,你必须指定一个in,这样它就知道要使用多少精度——否则,
BigDecimal
将尝试将其计算到无限精度,这对于某些值是不可能的


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

要将一个BigDecimal乘以10的幂,读者可能会更清楚(也更高效)使用和:


您可以使用
tempValue.movePointRight(index)
而不是
tempValue.multiply(ten.pow(exponent))

我绝对相信它的精度不是无限的。不过我还是会犯那个错误。当执行的某些操作往往在0附近执行时,使用double不会达到最大值。我看不出10到10的断电时间是什么样的,一个科学计算器的精度可以达到-99。否则会有更好的方法来表示这个吗?你能给我们异常的堆栈跟踪吗?@ErrorMessages
pow(int)
将在给定负数时抛出算术异常。总是。正确的。我应该注意到的。也就是说,@ErrorMessages,看起来您的方法实际上相当于
scaleByPowerOfTen
,这可能更简单。