2010-01-21 191 views
17

我還沒有發現任何本地方法來做到這一點,所以我創建了自己的輔助類:計算百分比BigDecimals的

public static BigDecimal percentage(BigDecimal base, BigDecimal pct){ 
    return base.multiply(pct).divide(new BigDecimal(100)); 
} 

但我不太喜歡它,我不知道如果API有類似的東西。 Number類(BigDecimal的祖先)將是一個不錯的地方。

+5

你爲什麼不喜歡它?它出什麼問題了? – 2010-01-21 14:25:57

+2

我想到有多少其他程序員要創建相同的方法,這只是幹。即使是最簡單的計算器也有一個百分比按鈕。我不明白爲什麼班上沒有它。 – 2010-01-21 16:57:57

+1

@LluisMartinez:這裏的問題是精確性。當你劃分兩個''BigDecimal''(你在計算百分比時要這樣做)時,你必須提供一個適當的舍入模式。我想這就是爲什麼這個類不提供''percentage()''方法。看看'BigDecimal'',有六個'divide()''方法已經有了不同的簽名。提供一個百分比方法,你必須添加另外6個以上的方法,最終會增加整個實現。 – user1438038 2015-06-24 09:18:09

回答

7

隨意加入子類BigDecimal並添加該方法。除此之外,你期望什麼?您知道在哪裏可以找到該API,並確認您希望擁有該方法的課程沒有。就個人而言,我會說功能太小,以至於在標準API中使用它沒有多大意義。

+4

是的,它是微不足道的,但經常使用,至少在某些類型的應用程序。 – 2010-01-21 16:54:03

+1

我同意。儘管微不足道,但用得很多 – vsingh 2013-02-12 16:31:34

11

我不認爲有一個API(不是真的需要)。
您的解決方案接縫對我很好,也許你只需要添加的不斷ONE_HUNDRED

public static final BigDecimal ONE_HUNDRED = new BigDecimal(100); 

public static BigDecimal percentage(BigDecimal base, BigDecimal pct){ 
    return base.multiply(pct).divide(ONE_HUNDRED); 
} 

可能不是多大的收穫,只要叫非常經常

最終把它放在一些的Util類...

+1

BigDecimal有零,一和十。但不是一百或幾千。 Curioso! – 2010-01-21 16:59:24

+0

@Lluis:'ZERO'和'ONE'相當古老(Java 1.2);從Java 5開始,'TEN'也變老了;也許我們得到HUNDERT與Java 7 :-)但是沒有什麼大不了的...... Saludos! – 2010-01-21 20:47:26

2

另請參閱DecimalFormat。您可以使用父母的工廠方法NumberFormat.getPercentInstance(),如圖所示herehereet al。

+2

儘管此鏈接可能回答此問題,但最好在此處包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17666153) – 2017-10-18 20:22:13

5

您可能需要使用BigDecimal.scaleByPowerOfTen(-2)來實現除數100。

如果你做了一百萬次,它會加起來。我的經驗要快得多。

還有一個類似的方法BigDecimal.movePointLeft(2) - 請參閱the other thread瞭解詳情,並決定哪一個更適合您。