Python:计算贷款支付的更智能方法

goo*_*orp 7 python algorithm math finance

如何计算贷款月租费?

鉴于:

  • a:贷款金额.
  • b:贷款期限(月数).
  • c:利率pa(每月计算和增加利息,增加利息的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)
Run Code Online (Sandbox Code Playgroud)

进化只是一种功能,可以显示贷款的支付方式和利息利息,总计支付的利息总额等.

一个例子是,如果我想找出以10万美元开始并以5万美元的利息结束,利息为8%且持续时间为70个月的贷款的每月付款,

>>> find_payment(100000, 50000, 70, 0.08)
payment is 1363
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我最终会得到49935,并且我经历了5次循环.通过循环所需的次数取决于我想要达到数量的接近程度,并且它会有所不同.

JDu*_*ley 10

这基本上是抵押贷款还款计算.

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

首先考虑您想要还清的部分付款.

Principal = start - end
Run Code Online (Sandbox Code Playgroud)

每月付款由下列人员给出:

pay_a = (interest / 12) / (1 - (1+interest/12) ^ (-months))) * Principal
Run Code Online (Sandbox Code Playgroud)

然后,您需要考虑额外的兴趣.这等于剩余的每月利息的主要时间

pay_b = interest / 12 * end
Run Code Online (Sandbox Code Playgroud)

所以总付款是

payment = (interest / 12) * (1 / (1 - (1+interest/12) ^ (-months))) * Principal + end)
Run Code Online (Sandbox Code Playgroud)

在你给出的例子上

Start: 100000
End:  50000
Months: 70
Interest: 8% 
pay_a = 896.20
pay_b = 333.33
Payment = 1229.54
Run Code Online (Sandbox Code Playgroud)

当我在Excel中测试这些值时,在70次付款后,剩余贷款为50,000.这是假设您在每个月付款之前支付名义利息.