2010-01-21 299 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了解详情,并决定哪一个更适合您。