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次。需要循环的次数取决于我想要接近的金额,次数会有些变化。
7 个回答
0
你可以每个月继续支付利息;这样的话,你永远都只会欠同样的金额。
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
4
也许最简单的理解方式是把贷款分成两个部分,一部分是需要全额还款的,另一部分则是不需要还款的。你已经算出了第一部分的每月费用。
11
这基本上是一个房贷还款计算。
假设开始的数值大于结束的数值,并且利率在0到1之间(比如0.1代表10%的利率)。
首先要考虑你想要偿还的那部分款项。
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次还款后,剩余的贷款是50,000。这是基于你每个月在还款前先支付名义利息的假设。