Python: 计算贷款支付更聪明的方法

2024-05-15 13:00:30 发布

您现在位置:Python中文网/ 问答频道 /正文

如何计算贷款的月费?

给出的是:

  • a: 一笔贷款。
  • b: 贷款期限(月数)。
  • c: 年利率(利息每月计算并加上,加上利息的1/12)。所以如果利息是12%,每个月加1%的利息)。
  • d: 期末后所欠的金额。

这个问题与以往有点不同,因为目标不是在贷款期结束后还清贷款,而是仍然欠下一定数额的贷款。我已经找到了一个算法,所以如果我想支付全部金额,就可以解决这个问题,但对于这个问题来说,它当然行不通,因为这个问题的目标是最终欠下一个给定的金额,而不是不欠任何东西。

我设法从一个猜测开始解决这个问题,然后继续改进这个猜测,直到它足够接近。不过,我想知道,是否有更好的方法来简单计算,而不是仅仅猜测。

编辑:以下是我现在的做法。

def find_payment(start, end, months, interest):
    difference = start
    guess = int(start / months * interest)
    while True:
        total = start
        for month in range(1, months + 1):
            ascribe = total * interest / 12
            total = total + ascribe - guess
        difference = total - end
        # See if the guess was good enough.
        if abs(difference) > start * 0.001:
            if difference < 0:
                if abs(difference) < guess:
                    print "payment is %s" % guess
                    return evolution(start, guess, interest, months)
                else:
                    mod = int(abs(difference) / start * guess)
                    if mod == 0:
                        mod = 1
                    guess -= mod
            else:
                mod = int(difference / start * guess)
                if mod == 0:
                    mod = 1
                guess += mod
        else:
            print "payment is %s" % guess
            return evolution(start, guess, interest, months)

演化只是一个函数,它显示贷款的付款方式和利息支付方式,总结支付的利息总额等

举个例子,如果我想知道一笔贷款的月供,从10万美元开始,到5万美元结束,利息8%,期限70个月,打电话给

>>> find_payment(100000, 50000, 70, 0.08)
payment is 1363

在上面的情况下,我会欠49935英镑,我通过循环5次。循环所需的次数取决于我想接近的程度,而且会有一些变化。


Tags: modifisabspayment金额startint
3条回答

这基本上是一个mortgage repayment calculation

假设开始时间大于结束时间,并且利息在0和1之间(即10%利息为0.1)

首先考虑一下你想付清的那部分款项。

Principal = start - end

每月付款方式如下:

pay_a = (interest / 12) / (1 - (1+interest/12) ^ (-months))) * Principal

然后你需要考虑额外的利息。等于剩余本金乘以月利息

pay_b = interest / 12 * end

所以总的付款是

payment = (interest / 12) * (1 / (1 - (1+interest/12) ^ (-months))) * Principal + end)

你举的例子

Start: 100000
End:  50000
Months: 70
Interest: 8% 
pay_a = 896.20
pay_b = 333.33
Payment = 1229.54

当我在Excel中测试这些值时,在70次付款后,重做贷款是50000。假设你在每月付款前支付名义利息。

你可以继续付每个月的利息,然后,你将永远欠同样的钱。

Owe_1 = a

Int_2 = Owe_1*(InterestRate/12)
Pay_2 = Int_2
Owe_2 = Owe_1 + Int_2 - Pay_2 # ==> Owe_1 + Int_2 - Int_2 = Owe_1

Int_3 = Owe_2*(InterestRate/12)
Pay_3 = Int_3
Owe_3 = Owe_2 + Int_3 - Pay_3 # ==> Owe_2 + Int_3 - Int_3 = Owe_2 = Owe_1

也许最简单的方法就是把贷款分成两部分,一部分是要全额偿还,另一部分是你什么也不还。你已经计算了第一部分的月费。

相关问题 更多 >