2015-08-23 3 views
3

У меня есть BigDecimal a1BigDecimal себя странно

BigDecimal a1 = new BigDecimal("0"); 
System.out.println(a1) //"0.0" 

Когда я

a1.pow(2) 

I и напечатать значение я получаю "0,00"
В моей программе, я петля это, и что вызывает проблемы, потому что каждый раз, когда он петли, он удваивает конечные 0. Для того, чтобы моя программа работала по назначению, она могла получить 2^100 завершающих нулей, что замедляет производительность и занимает много памяти. Я пробовал

a1.stripTrailingZeros(); 

но он все еще хранит бесполезные нули и занимает много времени, чтобы вычислить.
В этом случае мне нужно максимизировать производительность, поэтому преобразование в строку и выполнение строковых манипуляций может быть не лучшим образом. Что мне делать, чтобы это исправить?

+3

Вы не хотите a1 = 0, так как 0 до любой положительной степени равно 0. Могу ли я что-то отсутствует? Возможно, a1 = 10, поскольку вы упоминаете конечные нули? – DSlomer64

+2

Если вы не хотите, чтобы конечные нули задавали масштаб соответствующим образом. – EJP

+0

Я использовал 0 в качестве примера. Я использую много других значений. –

ответ

5

BigDecimal является неизменным (и не работает на месте). Изменение

a1.pow(2); 

к (что-то вроде)

a1 = a1.pow(2); 

Конечно, 0 * 0 является 0. Итак, чтобы получить ненулевое число; вы могли бы сделать что-то вроде

public static void main(String[] args) { 
    BigDecimal a1 = new BigDecimal("2"); 
    a1 = a1.pow(2); 
    System.out.println(a1); 
} 

И я получаю (ожидаемый)

4 
+0

Я установил его так, чтобы он выполнял 'a1 = a1.pow (2);'. Я просто забыл это сделать в моем примере –

+2

Я понял, что сделал. Я забыл сделать «a1 = a1.stripTrailingZeros'() ;. благодаря –

Смежные вопросы