Как мне вывести значение 'а' из цикла

Я хочу сделать код высчитывающий проценты. Но мне не удаётся вернуть изменённое значение из цикла

package ILBC;

import java.util.Scanner;

public class Percents {
    public static double Percentage (double Money, double YearPercent, double Years) {
        double a = 0;
        for (int i = 0; i == Years; i++) {
            a += (Money * (YearPercent / 100));
        }
        return a;
    }

    public static void main(String[] args) {
        Scanner cs = new Scanner(System.in);
        System.out.println("Сумма");
        double Money = cs.nextDouble();
        System.out.println("Время (сколько лет)");
        double Years = cs.nextDouble();
        System.out.println("Годовой процент");
        double YearPercent = cs.nextDouble();
        cs.close();

        System.out.println(Percentage(Money, YearPercent, Years));
    }
}

Ответы (1 шт):

Автор решения: Nowhere Man

Во-первых, в коде есть опечатка в условии цикла i == Years, из-за которой цикл не выполняет ни одной итерации, и соответственно метод всегда возвращает значение 0.

Во-вторых, даже если исправить эту опечатку, чтобы проверялось условие i < Years, вычисления останутся неправильными.
Например, при вводе дробных значений Years всегда будет начисляться процент за полный год, когда реально останется меньше года.

В-третьих, в представленном коде не вычисляется сложный процент, т.е. не происходит капитализация процентов (они не прибавляются к основной сумме), поэтому цикл для таких вычислений вообще не нужен, достаточно было бы вернуть результат простого умножения: Money * YearPercent * Years / 100.

Для вычисления сложного процента с учётом капитализации процентов в конце каждой итерации следовало бы прибавить к Money накопленный процент.

В-четвертых, для финансовых вычислений используется неподходящий тип данных с плавающей точкой, из-за чего могут возникнуть ошибки округления.

Вариант исправленного кода:

public static double totalRevenue(double amount, double interestRate, double years) {
    double total = 0;
    interestRate /= 100;
    
    while (years > 0) {
        double revenue = Math.round(amount * interestRate * Math.min(1, years) * 100) / 100d;
        total  = Math.round(100 * (total  + revenue)) / 100d;
        amount = Math.round(100 * (amount + revenue)) / 100d;
        years -= 1;
    }
    return total;
}
→ Ссылка