贷款等额本金与等额本息还款计算器python3实现
等额本息还款计算逻辑等额本金还款计算逻辑python3计算等额本息与等额本金还款计划调用例子等额本息还款计算逻辑
1、等额本息还款法每期应还额(月供)相等,计算公式为:
P=i∗(1+i)n(1+i)n−1∗CP = \frac{i*(1+i)^n}{(1+i)^n-1}*CP=(1+i)n−1i∗(1+i)n∗C
P:每期应还额
i:月利率 = 年利率 / 12
n:期数
C:本金
2、计算出每期应还额后再计算每期应还利息和应还本金:
每期应还利息 = 剩余本金余额 * 月利率
每期应还本金 = 每期应还额 - 每期应还利息
等额本金还款计算逻辑
1、计算等额本金每期应还本金:
每期应还本金 = 本金 / 期数
2、计算每期应还利息和每期应还额
每期应还利息 = 剩余本金余额 * 月利率
每期应还额 = 每期应还本金 + 每期应还利息
python3计算等额本息与等额本金还款计划
import pandas as pdclass financeCalculator():def __init__(self,Corpus,numOfPeriod,Interest):'''3个入参:本金 / 期数 / 利率(年利率)'''self.Corpus = Corpusself.numOfPeriod = numOfPeriodself.Interest = Interestdef calPayPerPeriod(self):'''等额本息计算每期还款额的公式'''r = self.Interest / 12 / 100return r * (1+r)**self.numOfPeriod * self.Corpus / ((1+r)**self.numOfPeriod - 1)def averageCorpusPlusInterest(self):'''计算等额本息还款计划表'''interestList,paidCorpus,unpaidCorpus = [],[],[]r = self.Interest / 12 / 100for i in range(self.numOfPeriod):balance = self.Corpus - sum(paidCorpus)payInte = balance * rinterestList.append(payInte)payPerPeriod = self.calPayPerPeriod()paidCorpus.append(payPerPeriod - payInte)unpaidCorpus.append(balance)unpaidCorpus = unpaidCorpus[1:] + [0]df = pd.DataFrame({'期数':list(range(1,self.numOfPeriod+1)),'月供':[payPerPeriod]*self.numOfPeriod,'月供本金':paidCorpus,'月供利息':interestList,'本金余额':unpaidCorpus})df = df.set_index('期数').round(2).reset_index()summary = ['总计',round(df['月供'].sum(),2),round(df['月供本金'].sum()),round(df['月供利息'].sum(),2),'--']df = df.append(pd.Series(summary,index=df.columns),ignore_index=True)return dfdef averageCorpus(self): '''计算等额本金还款计划表'''paidCorpus,unpaidCorpus,interestList,payPerPeriod = [],[],[],[]r = self.Interest / 12 / 100for i in range(self.numOfPeriod):balance = self.Corpus - sum(paidCorpus)payInte = balance * runpaidCorpus.append(balance)paidCorpus.append(self.Corpus / self.numOfPeriod)interestList.append(payInte)payPerPeriod.append(self.Corpus / self.numOfPeriod + payInte)unpaidCorpus = unpaidCorpus[1:] + [0]df = pd.DataFrame({'期数':list(range(1,self.numOfPeriod+1)),'月供':payPerPeriod,'月供本金':paidCorpus,'月供利息':interestList,'本金余额':unpaidCorpus})df = df.set_index('期数').round(2).reset_index()summary = ['总计',round(df['月供'].sum(),2),round(df['月供本金'].sum()),round(df['月供利息'].sum(),2),'--']df = df.append(pd.Series(summary,index=df.columns),ignore_index=True)return df
调用例子
fc = financeCalculator(6000,3,24)fc.averageCorpusPlusInterest()
fc.averageCorpus()