Kalkulator Bola Salju Utang
Rencanakan pelunasan utang dengan strategi bola salju atau longsor.
Tentang alat ini
Kalkulator Bola Salju Utang membantu Anda membuat rencana pelunasan strategis untuk beberapa utang menggunakan metode Bola Salju atau Longsoran. Banyak orang berjuang dengan beberapa utang dan menemukan sulit untuk tetap termotivasi ketika menghadapi total saldo yang besar. Alat ini memberi Anda peta jalan bulan demi bulan yang menunjukkan dengan tepat kapan setiap utang akan lunas dan berapa banyak bunga yang akan Anda hemat dengan melakukan pembayaran tambahan di luar minimum.
Untuk menggunakan kalkulator, daftarkan semua utang Anda dengan saldo saat ini, pembayaran bulanan minimum, dan suku bunga, kemudian atur anggaran pembayaran bulanan total Anda. Kalkulator mengurutkan kembali utang Anda sesuai strategi yang dipilih: metode Bola Salju memprioritaskan saldo terkecil terlebih dahulu untuk momentum psikologis, sementara Longsoran menargetkan suku bunga tertinggi untuk meminimalkan bunga total yang dibayarkan. Dalam hitungan detik, Anda akan melihat jadwal pelunasan lengkap, total bunga, dan efek bola salju bulan demi bulan saat utang yang telah lunas membebaskan dana untuk utang target berikutnya.
Metode Bola Salju biasanya memiliki tingkat penyelesaian yang lebih tinggi karena kemenangan awal membangun momentum emosional, sementara Longsoran menghemat uang paling banyak secara matematis. Pilih Bola Salju jika motivasi adalah tantangan Anda, dan Longsoran jika Anda disiplin dengan keuangan. Ingat bahwa kalkulator mengasumsikan suku bunga tetap dan kepatuhan ketat terhadap rencana pembayaran; pada kenyataannya, Anda mungkin perlu menyesuaikan dengan biaya baru atau perubahan hidup. Gunakan sebagai peta jalan motivasi daripada kontrak finansial yang tepat, dan pertimbangkan konsultasi penasihat kredit jika situasi utang Anda terasa kewalahan.
Pertanyaan yang Sering Diajukan
Implementasi Kode
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.