如何计算贷款的月费?
给出的是:
- 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)
进化只是一个函数,它显示贷款的支付方式和利息的支付方式,总结支付的利息总额等。
一个例子是,如果我想找出从 10 万美元开始到 5 万美元结束的贷款的每月还款额,利息为 8%,期限为 70 个月,调用
>>> find_payment(100000, 50000, 70, 0.08)
payment is 1363
在上述情况下,我最终会欠 49935,我经历了 5 次循环。通过循环所需的时间取决于我想要达到的数量,并且它会有所不同。