Как посчитать процент
Короткий ответ
Процент от числа — это число, умноженное на процент и делённое на 100:
void main() {
double price = 80;
double discount = price * 15 / 100;
IO.println(discount);
IO.println(price - discount);
}Результат:
12.0
68.0Какую долю составляет часть
Разделите часть на целое и умножьте на 100:
void main() {
int done = 37;
int total = 120;
double percent = done * 100.0 / total;
IO.println(String.format(Locale.US, "%.1f%%", percent));
}Результат:
30.8%%% в шаблоне выводит сам знак процента.
Изменение в процентах
Рост или падение считают от старого значения:
void main() {
double before = 250;
double after = 300;
double change = (after - before) / before * 100;
IO.println(String.format(Locale.US, "%+.1f%%", change));
}Результат:
+20.0%Деньги
Для денежных процентов используйте BigDecimal и округление до копеек:
void main() {
var amount = new BigDecimal("1999.99");
var rate = new BigDecimal("12.5");
var fee = amount.multiply(rate).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
IO.println(fee);
}Результат:
250.00Частая ошибка
Делить целые числа. Результат деления двух int тоже целый — дробная часть отбрасывается:
void main() {
int done = 37;
int total = 120;
IO.println(done / total * 100);
IO.println(done * 100.0 / total);
}Результат:
0
30.833333333333332Функции из этого ответа
- BigDecimal — Точное десятичное число — для денег и расчётов, где недопустимы ошибки округления double.
- String.format() — Собирает строку по шаблону с подстановками вроде %s и %d.
- Math.round() — Округляет число до ближайшего целого.