在該類中覆蓋了基類的 Calculate 虛方法,在主循環中逐月計算還款計劃表。
等本息法在利率不變的情況下,每月的還款額是固定的,所以也稱為“等額法”,計算公式如下:
月還款額 = 貸款金額 x 月利率 x (1 + 月利率)期數這個公式在 GetMonthAmount 方法中計算。
而月還利息等於上月剩余貸款余額乘以月利率,月還本金等於月還款額減去月還利息。
然後,本月剩余貸款余額等於上月剩余貸款余額減去月還本金。
最後,由於計算時需要進行捨入處理,到最後一期還款後可能剩余的貸款余額不為零,這就需要在保持月還款額不變的情況下調整月還本金和月還利息。
表示等本金法的 LoanDesc 類也是從 LoanBase 類中派生的:
using System;
using System.Drawing;
using System.Collections.Generic;
namespace Skyiv.Ben.LoanCalculator
{
// 等本金法
class LoanDesc : LoanBase
{
public LoanDesc(decimal balance, int months, DateTime date, KeyValuePair<DateTime, PointF>[] rates)
: base(balance, months, date, rates)
{
}
protected override void Calculate(decimal balance, int months, DateTime date, KeyValuePair<DateTime, PointF>[] rates)
{
decimal baseAmount = Round(balance / months), totalAmount = 0, totalInterest = 0;
for (int month = months; month >= 1; month--, date = date.AddMonths(1))
{
var monthRate = GetMonthRate(date, months, rates);
var interest = Round(balance * monthRate);
var monthAmount = baseAmount + interest;
balance -= baseAmount;
if (month == 1 && balance != 0)
{
baseAmount += balance;
monthAmount += balance;
balance = 0;
}
totalAmount += monthAmount;
totalInterest += interest;
Table.Rows.Add(new object[] { months - month + 1, date, baseAmount, interest, monthAmount, balance, totalAmount, totalInterest });
}
}
}
}