当前位置: 首页 > news >正文

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

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

  • 1.背景
  • 2.计算
  • 3.总结
  • 4.推导

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]

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

相关文章:

  • Activiti(二)- 基于SpringBoot开发配置activiti相关配置项
  • 深入理解C++面向对象特性之一 多态
  • Linux驱动开发进阶(六)- 多线程与并发
  • Redis到底能不能做主数据库?
  • xv6-labs-2024 lab1
  • QML面试笔记--UI设计篇03导航控件
  • 国内数据安全传送简述
  • python 微信小程序支付、查询、退款使用wechatpy库
  • 神经探针与价值蓝海:AI重构需求挖掘的认知拓扑学
  • 深度学习 Deep Learning 第19章 近似推理
  • 基于SpringBoot的在线拍卖系统(源码+数据库+万字文档+ppt)
  • 【LeetCode 题解】算法:34.在排序数组中查找元素的第一个和最后一个位置
  • Kafka 中的 offset 提交问题
  • Qt 资源文件(.qrc 文件)
  • 基于SpringBoot的“高校社团管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 基于ensp的mpls的解决bgp域内黑洞及MPLS VPN的应用
  • 心脏滴血漏洞(CVE-2014-0160)漏洞复现
  • 探秘PythonJSON解析深度剖析json.loads处理嵌套JSON字符串的奥秘
  • 《UNIX网络编程卷1:套接字联网API》第3章 套接字编程简介
  • MBR的 扩展分区 和 逻辑分区 笔记250407
  • 中日东三省问题的源起——《1905年东三省事宜谈判笔记》解题
  • 国新办将就2025年4月份国民经济运行情况举行新闻发布会
  • 云南大理铁路枢纽工程建设取得两大进展,预计明年建成
  • 新剧|《藏海传》定档,《折腰》《人生若如初见》今日开播
  • 挖掘机4月销量同比增17.6%,出口增幅创近两年新高
  • 打击网络谣言、共建清朗家园,中国互联网联合辟谣平台2025年4月辟谣榜