Как рассчитать ежемесячную комиссию по кредиту?
Дано:
- 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)
Эволюция - это просто функция, которая отображает, как кредит будет выглядеть как оплата за выплату и проценты за проценты, суммируя общую сумму уплаченных процентов и т. Д.
В качестве примера можно привести, если бы я хотел узнать ежемесячные платежи по кредиту, начиная с 100 тыс. Долл. И заканчивая 50 тыс. Долл. С процентной ставкой 8% и продолжительностью 70 месяцев, позвонив по номеру
>>> find_payment(100000, 50000, 70, 0.08)
payment is 1363
В приведенном выше случае я должен был бы получить 49935, и я прошел через цикл 5 раз. Количество раз, необходимое для прохождения цикла, зависит от того, насколько близко я хочу приблизиться к сумме, и оно немного меняется.