我无法找到为什么在使用大十进制时得到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 ,因为我需要精确。
谢谢
答案 0 :(得分:6)
如果您要向负面指数提升,则必须在MathContext
中指定BigDecimal.pow(int, MathContext)
,以便它知道要使用多少精度 - 否则,BigDecimal
会尝试将其计算到无限精度,这对于某些值是不可能的。
(除非您绝对确定您正在进行的操作具有有限位数的精确结果。)
答案 1 :(得分:2)
要将BigDecimal乘以10的幂,使用movePointLeft
和movePointRight
可能会让读者更清楚(也更有效率):
而不是tempValue.multiply(ten.pow(exponent))
,您将使用tempValue.movePointRight(exponent)
。