Вычислить процент для больших децимал
Я не нашел никакого нативного метода для этого, поэтому я создал свой собственный в вспомогательном классе:
public static BigDecimal percentage(BigDecimal base, BigDecimal pct){
return base.multiply(pct).divide(new BigDecimal(100));
}
Но мне это не очень нравится, интересно, имеет ли API что-то подобное. Класс Number (предок BigDecimal) был бы хорошим местом.
Ответы
Ответ 1
Не подпускайте подкласс BigDecimal
и добавляйте этот метод. Помимо этого, что вы ожидаете? Вы знаете, где найти API и подтвердить, что класс, который вы хотели бы использовать, не имеет. Лично я бы сказал, что функциональность настолько тривиальна, что в стандартном API не было бы большого смысла.
Ответ 2
Я не думаю, что для этого есть 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...
Ответ 3
Вы можете реализовать деление на 100 с помощью BigDecimal.scaleByPowerOfTen(-2)
.
Это добавляется, если вы делаете это миллион раз. Это намного быстрее в моем опыте.
Существует также аналогичный метод BigDecimal.movePointLeft(2)
- см. другой поток для подробностей и решить, какой из них лучше для вас.
Ответ 4
См. также DecimalFormat. Вы можете использовать родительский метод factory NumberFormat.getPercentInstance()
, как показано здесь, здесь и др.