Вычислить процент для больших десятичных чисел - PullRequest
25 голосов
/ 21 января 2010

Я не нашел никакого собственного метода для этого, поэтому я создал свой собственный в классе помощника:

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

Но мне это не совсем нравится, мне интересно, есть ли в API что-то похожее. Класс Number (предок BigDecimal) был бы хорошим местом.

Ответы [ 4 ]

17 голосов
/ 21 января 2010

Я не думаю, что для этого есть 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 ...

8 голосов
/ 21 января 2010

Не стесняйтесь подкласс BigDecimal и добавьте этот метод. Помимо этого, что вы ожидаете? Вы знаете, где найти API и подтверждаете, что класс, который вы хотели бы иметь для этого метода, отсутствует. Лично я бы сказал, что функциональность настолько тривиальна, что не было бы особого смысла иметь ее в стандартном API.

7 голосов
/ 02 августа 2016

Вы можете реализовать деление на 100, используя BigDecimal.scaleByPowerOfTen(-2).

Это складывается, если вы делаете это миллион раз. По моему опыту это намного быстрее.

Существует также аналогичный метод BigDecimal.movePointLeft(2) - см. другой поток для деталей и решите, какой из них лучше для вас.

2 голосов
/ 21 января 2010

См. Также Десятичный формат . Вы можете использовать фабричный метод родителя NumberFormat.getPercentInstance(), как показано здесь , здесь и др.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...