java BigDecimal arithmaticException недопустимая операция - PullRequest
8 голосов
/ 29 марта 2012

Я не могу найти, почему я получил 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 ]

6 голосов
/ 29 марта 2012

Если вы поднимаете вещи до отрицательных показателей, вы должны указать MathContext в BigDecimal.pow(int, MathContext), чтобы он знал, какую точность использовать - иначе, BigDecimalпопытается вычислить его с бесконечной точностью, что невозможно для некоторых значений.

(Если вы не можете быть абсолютно уверены , что выполняемая операция имеет точный результат с конечнымколичество цифр.)

2 голосов
/ 30 марта 2012

Чтобы умножить BigDecimal на степень 10, читателю, вероятно, будет понятнее (и более эффективно) использовать movePointLeft и movePointRight:

Вместо tempValue.multiply(ten.pow(exponent)) вы бы использовали tempValue.movePointRight(exponent).

...