Подтвердить что ты не робот

Вычислить процент для больших децимал

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

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

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

4b9b3361

Ответ 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(), как показано здесь, здесь и др.