用 Python 对比等额本金与等额本息:总利息差与月供递减节奏
选按揭方式时,等额本金与等额本息的差别常被概括成"前者利息少、后者月供低",但差距具体有多少、月供曲线长什么样,多数介绍止步于一句定性描述。本文由深工优居整理两种还款方式的公开计算口径,用 Python 在同一组参数下做对照测算:按揭 200 万元、30 年、示例年利率 3.05%,把总利息差、月供递减节奏和两种方式的月供交叉时点算清楚。
一、两种方式的计算口径
等额本息每月还款额固定,月供 M = P × r × (1+r)^n ÷ ((1+r)^n − 1),其中 P 为按揭本金,r 为月利率,n 为总期数。等额本金则把本金平均分到每一期,每期归还固定本金 P/n,利息按当期剩余本金计算,因此月供逐月递减,每月递减额固定为 (P/n) × r。
二、Python 实现
def annuity(p, annual_rate, years): r = annual_rate / 12 n = years * 12 return p * r * (1 + r) ** n / ((1 + r) ** n - 1), r, n P, AR, Y = 2_000_000, 0.0305, 30 r, n = AR / 12, Y * 12 m_ann, _, _ = annuity(P, AR, Y) tot_int_ann = m_ann * n - P mp = P / n # 每期固定归还本金 p_first = mp + P * r # 等额本金首期月供 decline = mp * r # 每月递减额 p_last = mp + mp * r # 末期月供 tot_int_ep = P * r * (n + 1) / 2 print(f"等额本息月供 {m_ann:,.2f},总利息 {tot_int_ann:,.2f}") print(f"等额本金首期 {p_first:,.2f},每月递减 {decline:,.2f},末期 {p_last:,.2f},总利息 {tot_int_ep:,.2f}") print(f"总利息差 {tot_int_ann - tot_int_ep:,.2f}") k, pay = 1, p_first while pay > m_ann: k += 1 pay = mp + (P - mp * (k - 1)) * r print(f"等额本金月供低于等额本息的期数:第 {k} 期(月供 {pay:,.2f})") bal, tot12 = P, 0.0 for _ in range(12): it = bal * r bal -= m_ann - it tot12 += it ep12 = sum((P - mp * (k - 1)) * r for k in range(1, 13)) print(f"首年利息:等额本金 {ep12:,.0f},等额本息 {tot12:,.0f}")三、运行结果
等额本息月供 8,486.11,总利息 1,054,999.17 等额本金首期 10,638.89,每月递减 14.12,末期 5,569.68,总利息 917,541.67 总利息差 137,457.50 等额本金月供低于等额本息的期数:第 154 期(月供 8,478.47) 首年利息:等额本金 60,068,等额本息 60,424四、三个观察
- 同样 200 万元、30 年,等额本金的总利息约 91.75 万元,等额本息约 105.50 万元,相差约 13.75 万元。差距的来源不是利率,而是本金下降速度:等额本金每期多还一些本金,剩余计息基数降得更快。
- 代价集中在前段:等额本金首期月供 10,638.89 元,比等额本息的 8,486.11 元高出约 25%,此后每月只递减 14.12 元,到第 154 期(约 12 年 10 个月)月供才降到等额本息之下。选等额本金实质是用前十年的现金流压力,换取全周期利息支出减少。
- 首年利息合计:等额本金 60,068 元、等额本息 60,424 元,只差 356 元。两种方式首年的利息成本几乎相同,真正的分化发生在后续年度——等额本金因本金下降快而被逐年拉开,这也是"等额本金省利息"的算术本质。
五、数据口径说明
本文利率 3.05% 为测算演示所用示例值,不代表任何在售项目的实际执行利率;两种还款方式均按银行通行的标准公式计算,统计时点为 2026 年 9 月。测算结果仅为结构演示,具体项目的还款方式、利率与期数以按揭合同约定为准。
本文由深工优居基于公开摊还口径整理测算。深工优居持续整理深圳各片区新房的公开备案与规划数据,以数据视角输出购房科普内容。