【python3】关于等额本金和等额本息计算

发布于:2025-04-12 ⋅ 阅读:(38) ⋅ 点赞:(0)

【python3】关于等额本金和等额本息计算

1.背景

在贷款买房的宝子们一定有了解等额本金和等额本息,年轻的时候只听销售在那里计算,
您可能听得云里雾里。

等额本金:每个月还的本金固定,利息逐渐减少。总还款额每个月递减。计算公式的话,每月应还本金应该是贷款总额除以月数,比如总贷款是A,分n个月还,那每月本金就是A/n。利息的话就是剩余本金乘以月利率,比如第一个月利息是Ar,第二个月是(A - A/n)r,依此类推。所以每个月的还款额是本金部分加上剩余本金的利息。总利息的话,可能需要把每个月的利息加起来,所以总利息是Ar(n + 1)/2。

等额本息:每个月还款额相同。总利息就是每月还款额乘以n,减去本金A。

2.计算

等额本息还款法的计算公式是:

[贷款本金 × 月利率 ×(1+月利率)^还款月数] ÷ [(1+月利率)^还款月数 -1 ](其中^为次方的意思)

等额本金还款法的计算公式是:

[贷款本金 / 还款期数 + (贷款本金 - 累积已归还本金额)*月利率

如下图:
在这里插入图片描述

# -*- coding: utf-8 -*-
# csdn:jn10010537
def calc_equal_principal(principal, annual_rate, years):
    """
    等额本金还款计算
    :param principal: 贷款本金
    :param annual_rate: 年利率(例如0.05表示5%)
    :param years: 贷款年数
    :return: 每月还款计划,总利息
    """
    monthly_rate = annual_rate / 12         # 月利率
    months = years * 12                     # 总月数
    monthly_principal = principal / months  # 每月应还本金

    total_interest = 0                      # 总利息
    schedule = []                           # 还款计划
    remaining = principal                   # 剩余本金

    for month in range(1, months + 1):
        interest = remaining * monthly_rate           # 当月利息
        total_payment = monthly_principal + interest  # 当月总还款额
        total_interest += interest

        schedule.append({
            '第几月': month,
            '当月应还本金': round(monthly_principal, 2),
            '当月利息': round(interest, 2),
            '当月总还款额': round(total_payment, 2),
            '当月还款后剩余本金': round(remaining - monthly_principal, 2)
        })
        remaining -= monthly_principal  # 更新剩余本金

    return schedule, round(total_interest, 2)

def calc_equal_installment(principal, annual_rate, years):
    """
    等额本息还款计算
    :param principal: 贷款本金
    :param annual_rate: 年利率(例如0.05表示5%)
    :param years: 贷款年数
    :return: 每月还款计划,总利息
    """
    monthly_rate = annual_rate / 12   # 月利率
    months = years * 12                # 总月数
    # 计算每月还款额
    monthly_payment = (principal * monthly_rate * (1 + monthly_rate)**months /
                       ((1 + monthly_rate)**months - 1))
    monthly_payment = round(monthly_payment, 2)  # 四舍五入到分

    total_interest = 0
    schedule = []
    remaining = principal

    for month in range(1, months + 1):
        interest = remaining * monthly_rate             # 当月利息
        principal_payment = monthly_payment - interest  # 当月本金

        # 处理最后一期剩余本金
        if month == months:
            principal_payment = round(remaining, 2)     # 确保剩余本金清零
            monthly_payment = round(principal_payment + interest, 2)
        total_interest += interest
        new_remaining = remaining - principal_payment
        schedule.append({
            '第几月': month,
            '当月应还本金': round(principal_payment, 2),
            '当月利息': round(interest, 2),
            '当月总还款额': monthly_payment,
            '当月还款后剩余本金': round(new_remaining, 2)
        })
        remaining = new_remaining

    return schedule, round(total_interest, 2)

# 示例使用
if __name__ == "__main__":
    principal = 1000000  # 贷款本金100万元
    annual_rate = 0.05   # 年利率5%
    years = 20           # 贷款期限20年

    # 计算等额本金
    schedule_principal, total_interest_principal = calc_equal_principal(principal, annual_rate, years)
    print("等额本金首月还款:", schedule_principal[0])
    print("等额本金总利息:", total_interest_principal)

    # 计算等额本息
    schedule_installment, total_interest_installment = calc_equal_installment(principal, annual_rate, years)
    print("\n等额本息首月还款:", schedule_installment[0])
    print("等额本息总利息:", total_interest_installment)

运行如下:
在这里插入图片描述

3.总结

等额本金:前期压力大,总利息较少;
等额本息:每月还款额固定,总利息较多;
注意:一个月有28天,30天,31天,那么其实利息是精确到天的!即月利息/当月天数,然后核算到交租金当日的本金加利息!
比如等额本金,每月15号付银行租子,当天15号利息算到下一个月!
2023年12月15日-2023年12月31日,合计17天,计算为16天.
2024年01月01日-2024年01月14日,合计14天.
2024年01月01日年化从4.3%调整为4.2%。

计算2024年1月15号付银行本息:
假如等额本金是15000
剩余本金是1000000
还款本息:15000 + 1000000* (4.3 / 12 * 0.01 * 16 / 31) + 1000000 * (4.2 / 12 * 0.01 * 14 / 31)

博主选择的是等额本金,假如没有法律的话,利息是不想还一点!没法,咬牙坚持长达20年的还款~
献给需要贷款的C友,买房需谨慎!

4.推导

上面等额本息比较麻烦一点!
等额本息贷款采用的是复合利率计算。在每期还款的结算时刻,剩余本金所产生的利息要和剩余的本金(贷款余额)一起被计息,也就是说未付的利息也要计息。

等额本息比较上面是结论,可以看下面的推导公式:
设贷款总额为A,银行月利率为β,总期数为m(个月),月还款额设为X,则各个月所欠银行贷款为:

第1个月:A(1)-X
第2个月:(A(1)-X)(1)-X = A(1)^2-X[1+(1)]
第3个月[(A(1)-X)(1)-X](1)-X =A(1)^3-X[1+(1)+(1)^2] …
由此可得第n个月后所欠银行贷款为 A(1)^n –X[1+(1)+(1)^2+…+(1)^(n-1)]= A(1)^n –X[(1)^n - 1]/β
由于还款总期数为m,也即第m月刚好还完银行所有贷款,
因此有 A(1)^m –X[(1)^m - 1]=0
由此求得 X =(1)^m /[(1)^m - 1]

等比数列求和公式:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到