贷款等额本金与等额本息还款计算器python3实现

等额本息还款计算逻辑

1、等额本息还款法每期应还额(月供)相等,计算公式为:
P = i ∗ ( 1 + i ) n ( 1 + i ) n − 1 ∗ C P = \frac{i*(1+i)^n}{(1+i)^n-1}*C P=(1+i)n1i(1+i)nC
P:每期应还额
i:月利率 = 年利率 / 12
n:期数
C:本金

2、计算出每期应还额后再计算每期应还利息和应还本金:
每期应还利息 = 剩余本金余额 * 月利率
每期应还本金 = 每期应还额 - 每期应还利息

等额本金还款计算逻辑

1、计算等额本金每期应还本金:
每期应还本金 = 本金 / 期数

2、计算每期应还利息和每期应还额
每期应还利息 = 剩余本金余额 * 月利率
每期应还额 = 每期应还本金 + 每期应还利息

python3计算等额本息与等额本金还款计划

import pandas as pd
class financeCalculator():
    def __init__(self,Corpus,numOfPeriod,Interest):
        '''3个入参:本金 / 期数 / 利率(年利率)'''
        self.Corpus = Corpus
        self.numOfPeriod = numOfPeriod
        self.Interest = Interest

    def calPayPerPeriod(self):
        '''等额本息计算每期还款额的公式'''
        r = self.Interest / 12 / 100
        return r * (1+r)**self.numOfPeriod * self.Corpus / ((1+r)**self.numOfPeriod - 1)

    def averageCorpusPlusInterest(self):
        '''计算等额本息还款计划表'''
        interestList,paidCorpus,unpaidCorpus = [],[],[]
        r = self.Interest / 12 / 100
        for i in range(self.numOfPeriod):
            balance = self.Corpus - sum(paidCorpus)
            payInte = balance * r
            interestList.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 df

    def averageCorpus(self):    
        '''计算等额本金还款计划表'''
        paidCorpus,unpaidCorpus,interestList,payPerPeriod = [],[],[],[]
        r = self.Interest / 12 / 100
        for i in range(self.numOfPeriod):
            balance = self.Corpus - sum(paidCorpus)
            payInte = balance * r
            unpaidCorpus.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()

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值