我還沒有發現任何本地方法來做到這一點,所以我創建了自己的輔助類:計算百分比BigDecimals的
public static BigDecimal percentage(BigDecimal base, BigDecimal pct){
return base.multiply(pct).divide(new BigDecimal(100));
}
但我不太喜歡它,我不知道如果API有類似的東西。 Number類(BigDecimal的祖先)將是一個不錯的地方。
我還沒有發現任何本地方法來做到這一點,所以我創建了自己的輔助類:計算百分比BigDecimals的
public static BigDecimal percentage(BigDecimal base, BigDecimal pct){
return base.multiply(pct).divide(new BigDecimal(100));
}
但我不太喜歡它,我不知道如果API有類似的東西。 Number類(BigDecimal的祖先)將是一個不錯的地方。
隨意加入子類BigDecimal
並添加該方法。除此之外,你期望什麼?您知道在哪裏可以找到該API,並確認您希望擁有該方法的課程沒有。就個人而言,我會說功能太小,以至於在標準API中使用它沒有多大意義。
是的,它是微不足道的,但經常使用,至少在某些類型的應用程序。 – 2010-01-21 16:54:03
我同意。儘管微不足道,但用得很多 – vsingh 2013-02-12 16:31:34
我不認爲有一個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類...
BigDecimal有零,一和十。但不是一百或幾千。 Curioso! – 2010-01-21 16:59:24
@Lluis:'ZERO'和'ONE'相當古老(Java 1.2);從Java 5開始,'TEN'也變老了;也許我們得到HUNDERT與Java 7 :-)但是沒有什麼大不了的...... Saludos! – 2010-01-21 20:47:26
另請參閱DecimalFormat。您可以使用父母的工廠方法NumberFormat.getPercentInstance()
,如圖所示here,hereet al。
儘管此鏈接可能回答此問題,但最好在此處包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/17666153) – 2017-10-18 20:22:13
您可能需要使用BigDecimal.scaleByPowerOfTen(-2)
來實現除數100。
如果你做了一百萬次,它會加起來。我的經驗要快得多。
還有一個類似的方法BigDecimal.movePointLeft(2)
- 請參閱the other thread瞭解詳情,並決定哪一個更適合您。
你爲什麼不喜歡它?它出什麼問題了? – 2010-01-21 14:25:57
我想到有多少其他程序員要創建相同的方法,這只是幹。即使是最簡單的計算器也有一個百分比按鈕。我不明白爲什麼班上沒有它。 – 2010-01-21 16:57:57
@LluisMartinez:這裏的問題是精確性。當你劃分兩個''BigDecimal''(你在計算百分比時要這樣做)時,你必須提供一個適當的舍入模式。我想這就是爲什麼這個類不提供''percentage()''方法。看看'BigDecimal'',有六個'divide()''方法已經有了不同的簽名。提供一個百分比方法,你必須添加另外6個以上的方法,最終會增加整個實現。 – user1438038 2015-06-24 09:18:09