Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как посчитать процент

Короткий ответ

Процент от числа — это число, умноженное на процент и делённое на 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() — Округляет число до ближайшего целого.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.