public static List <YearPayment> Calculate(List <LoanPayment> payments) { List <YearPayment> list = new List <YearPayment>(); YearPayment summPayment = null; List <LoanPayment> .Enumerator enumerator = payments.GetEnumerator(); while (true) { LoanPayment payment = enumerator.MoveNext() ? enumerator.Current : null; int year = payment == null ? 0 : payment.Month.Year; if (payment == null || summPayment == null || summPayment.Year != year) { if (summPayment != null) { list.Add(summPayment); } summPayment = payment == null ? null : new YearPayment() { Year = year }; } if (payment == null) { break; } summPayment.Interest += payment.Interest; summPayment.Principal += payment.Principal; } return(list); }
public static List <LoanPayment> Calculate(double loanAmount, double interestRate, double months, DateTime startMonth, out double payment) { payment = (loanAmount * interestRate) / (1 - Math.Exp((-months) * Math.Log(1 + interestRate))); payment = LoanPayment.Trunc2(payment); List <LoanPayment> payments = new List <LoanPayment>(); double balance = loanAmount; for (int i = 1; i <= months; i++) { LoanPayment lp = new LoanPayment(balance, payment, i, interestRate, startMonth); balance = lp.Balance; payments.Add(lp); if (lp.Balance <= 0) { break; } } payments[payments.Count - 1].UpdateBalance(); return(payments); }