Перейти к содержимому

Калькулятор снежного кома долгов

Планируйте погашение долгов по стратегии снежного кома или лавины.

Об этом инструменте

Калькулятор долгового снежного кома помогает вам создать стратегический план погашения нескольких долгов, используя метод снежного кома или лавины. Многие люди борются с несколькими долгами и испытывают трудности в поддержании мотивации перед лицом крупной общей задолженности. Этот инструмент предоставляет вам ежемесячную дорожную карту, которая точно показывает, когда будет погашен каждый долг, и сколько процентов вы сэкономите, делая дополнительные платежи сверх минимальных.

Чтобы использовать калькулятор, перечислите все ваши долги с их текущим остатком, минимальным ежемесячным платежом и процентной ставкой, затем установите общий месячный бюджет платежей. Калькулятор переупорядочивает ваши долги в соответствии с выбранной стратегией: метод снежного кома сначала приоритизирует наименьший остаток для психологического импульса, а метод лавины нацеливается на наибольшую процентную ставку для минимизации общего уплаченного процента. За несколько секунд вы увидите полный график погашения, общий процент и эффект снежного кома в месячном разрезе, когда погашенные долги освобождают средства для следующего целевого долга.

Метод снежного кома обычно имеет более высокие показатели завершения, потому что ранние победы создают эмоциональный импульс, в то время как метод лавины математически экономит больше всего денег. Выбирайте снежный ком, если мотивация — ваш вызов, и лавину, если вы дисциплинированы в финансах. Помните, что калькулятор предполагает фиксированные ставки и строгое соблюдение плана платежей; в действительности вы можете потребоваться приспосабливаться к новым сборам или изменениям в жизни. Используйте его как мотивационную дорожную карту, а не как точный финансовый контракт, и рассмотрите консультацию с кредитным советником, если ваша ситуация с долгом кажется непомерной.

Часто задаваемые вопросы

Реализация кода

from dataclasses import dataclass, field
from typing import List, Optional

@dataclass
class Debt:
    name: str
    balance: float
    min_payment: float
    apr: float  # Annual Percentage Rate e.g. 0.20 for 20%

    @property
    def monthly_rate(self) -> float:
        return self.apr / 12

@dataclass
class PayoffResult:
    name: str
    months_to_payoff: int
    total_paid: float
    total_interest: float

def debt_snowball(debts: List[Debt], monthly_budget: float) -> List[PayoffResult]:
    """
    Simulate the debt snowball method.
    Debts are sorted by balance (smallest first).
    Extra budget is applied to the current target debt.
    """
    # Sort by balance ascending (snowball)
    queue  = sorted(debts, key=lambda d: d.balance)
    paid   = [False] * len(queue)
    bals   = [d.balance for d in queue]
    totals = [0.0] * len(queue)  # total paid per debt
    month  = 0
    results = []

    while any(not p for p in paid):
        month += 1
        # Find current target: first unpaid debt
        target_idx = next(i for i, p in enumerate(paid) if not p)

        # Calculate total minimums for non-target debts
        minimums_used = sum(
            queue[i].min_payment for i in range(len(queue))
            if not paid[i] and i != target_idx
        )
        extra = monthly_budget - minimums_used

        # Apply payments
        for i, debt in enumerate(queue):
            if paid[i]:
                continue
            payment = extra if i == target_idx else debt.min_payment
            interest = bals[i] * debt.monthly_rate
            principal = min(payment - interest, bals[i])
            bals[i] -= principal
            totals[i] += payment
            if bals[i] <= 0.01:
                paid[i] = True
                results.append(PayoffResult(
                    name=debt.name,
                    months_to_payoff=month,
                    total_paid=totals[i] + bals[i],  # adjust overpayment
                    total_interest=totals[i] - debt.balance
                ))

    return results

# Example
debts = [
    Debt("Credit Card A", balance=2500,  min_payment=75,  apr=0.22),
    Debt("Credit Card B", balance=5000,  min_payment=100, apr=0.18),
    Debt("Car Loan",      balance=8000,  min_payment=200, apr=0.06),
    Debt("Student Loan",  balance=15000, min_payment=150, apr=0.05),
]

results = debt_snowball(debts, monthly_budget=700)

total_interest = sum(r.total_interest for r in results)
print("Debt Snowball Payoff Plan:")
print(f"{'Debt':<20} {'Months':>7} {'Interest Paid':>14}")
for r in results:
    yrs = r.months_to_payoff // 12
    mos = r.months_to_payoff % 12
    print(f"{r.name:<20} {yrs}y {mos:02d}m  ${r.total_interest:>12,.2f}")
print(f"{'Total interest:':<20}        ${total_interest:>12,.2f}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.