等额本息计算python

4 阅读2分钟
def calculate_equal_installment(principal: int, annual_rate: float, months: int):
    """
    计算等额本息还款计划的各项数据

    参数:
        principal (float): 贷款本金
        annual_rate (float): 年利率(百分比,例如5%)
        months (int): 贷款期限(月数)

    返回:
        dict: 包含月还款额、总利息、总还款额及详细还款计划的字典
    """
    monthly_rate = float(annual_rate / 100 / 12)  # 转换为月利率(小数形式)

    # 计算每月还款额
    monthly_payment = principal * monthly_rate * (1 + monthly_rate) ** months / ((1 + monthly_rate) ** months - 1)
    total_payment = monthly_payment * months
    total_interest = total_payment - principal

    # 生成还款计划
    schedule = []
    remaining = principal
    for month in range(1, months + 1):
        interest = remaining * monthly_rate
        principal_part = monthly_payment - interest

        # 处理最后一个月,确保剩余本金清零
        if month == months:
            principal_part = remaining
            interest = monthly_payment - principal_part  # 调整利息避免负值

        remaining -= principal_part

        # 四舍五入到分
        schedule.append({
            '期数': month,
            '月供': round(monthly_payment, 2),
            '本金': round(principal_part, 2),
            '利息': round(interest, 2),
            '剩余本金': abs(round(remaining, 2))  # 避免负值
        })

    # 结果四舍五入
    return {
        '月供': round(monthly_payment, 2),
        '总利息': round(total_interest, 2),
        '总还款': round(total_payment, 2),
        '还款计划': schedule
    }


money = int(input("请输入本金:"))
months = int(input("请输入总期数:"))
rate = float(input("请输入年利率:"))

print(f"等额本息,本金: {money}, 总期数{months}, 年利率{rate}")
# 示例用法
loan = calculate_equal_installment(money, rate, months)
print(f"每月还款: {loan['月供']}")
print(f"总利息: {loan['总利息']}")
print(f"总还款: {loan['总还款']}")
print("\n")
previous_months = 12
# 打印前面几个月的还款计划
print(f"前{previous_months}个月还款计划:")

total_interest = 0
for entry in loan['还款计划'][0:previous_months]:
    total_interest += entry['利息'] * 100
    print(
        f"期数{entry['期数']}: 月供{entry['月供']}元 = 本金{entry['本金']}元 + 利息{entry['利息']}元,剩余本金{entry['剩余本金']}元")
print(f"前{previous_months}个月的总利息", total_interest / 100)

结果

请输入本金:100000
请输入总期数:60
请输入年利率:4.8
等额本息,本金: 100000, 总期数60, 年利率4.8
每月还款: 1877.97
总利息: 12678.45
总还款: 112678.4512个月还款计划:
期数1: 月供1877.97元 = 本金1477.97元 + 利息400.0元,剩余本金98522.03元
期数2: 月供1877.97元 = 本金1483.89元 + 利息394.09元,剩余本金97038.14元
期数3: 月供1877.97元 = 本金1489.82元 + 利息388.15元,剩余本金95548.32元
期数4: 月供1877.97元 = 本金1495.78元 + 利息382.19元,剩余本金94052.54元
期数5: 月供1877.97元 = 本金1501.76元 + 利息376.21元,剩余本金92550.77元
期数6: 月供1877.97元 = 本金1507.77元 + 利息370.2元,剩余本金91043.0元
期数7: 月供1877.97元 = 本金1513.8元 + 利息364.17元,剩余本金89529.2元
期数8: 月供1877.97元 = 本金1519.86元 + 利息358.12元,剩余本金88009.34元
期数9: 月供1877.97元 = 本金1525.94元 + 利息352.04元,剩余本金86483.41元
期数10: 月供1877.97元 = 本金1532.04元 + 利息345.93元,剩余本金84951.36元
期数11: 月供1877.97元 = 本金1538.17元 + 利息339.81元,剩余本金83413.2元
期数12: 月供1877.97元 = 本金1544.32元 + 利息333.65元,剩余本金81868.87元
前12个月的总利息 4404.56