计算百分比BigDecimals的
我还没有发现任何本地方法来做到这一点,所以我创建了自己的辅助类:计算百分比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