java BigDecimal arithmaticException无效操作

时间:2012-03-29 19:36:04

标签: java bigdecimal largenumber

我无法找到为什么在使用大十进制时得到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 ,因为我需要精确。

谢谢

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

要将BigDecimal乘以10的幂,使用movePointLeftmovePointRight可能会让读者更清楚(也更有效率):

而不是tempValue.multiply(ten.pow(exponent)),您将使用tempValue.movePointRight(exponent)