2015-08-23 80 views
3

我有一個BigDecimal A1的BigDecimal怪怪

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

當我做

a1.pow(2) 

我和打印我得到 「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 * 00。所以,要得到一個非零的數字;你可以不喜歡

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'();.謝謝 –