Skip to main content

Methodology

Every StickMoney result should be reproducible. This page documents exactly how each calculator computes its numbers.

Estimates, not guarantees

Every figure on this site is an estimate computed from inputs you enter and the assumptions stated on each page — a chosen return, a chosen inflation rate, a chosen coverage period. Change an assumption and the answer changes. Nothing here predicts the future, and no result is a promise of performance. For the full picture, read the disclaimer.

Compound interest

The calculator uses a fixed-rate periodic model. The annual return you enter (r, as a decimal) is interpreted as an effective annual rate under the selected compounding frequency (n per year), giving an effective annual growth factor of (1 + r/n)n.

Contributions occur m times per year. The equivalent rate per contribution period is:

i = (1 + r/n)n/m − 1

This keeps the principal's growth and the contributions' growth on one consistent periodic grid: (1+i)m always equals the effective annual factor, so monthly deposits are never incorrectly assumed to land only on annual compounding dates.

Future value formulas

Over N = years × m contribution periods, with contribution C per period and initial principal P:

  • End-of-period deposits: FVcontrib = C × ((1+i)N − 1) / i
  • Beginning-of-period deposits: the above × (1+i)
  • Zero rate (i = 0): FVcontrib = C × N
  • Initial principal: FVprincipal = P × (1+i)N
  • Total: FV = FVprincipal + FVcontrib

The year-by-year breakdown reuses these closed forms with Ny = y × m for each yeary, so the headline result, chart, and table always agree. All math uses full floating-point precision internally; rounding happens only for display.

Investment return

For a lump sum growing from start to end over y years (decimals allowed):

  • Total return = (end − start) / start
  • CAGR = (end / start)1/y − 1

The yearly schedule shows smooth growth at the CAGR so the chart and table agree with the headline. Valid only for lump sums — deposits or withdrawals mid-period need a money-weighted calculation this tool does not do.

Inflation

A fixed-rate model with annual assumption r over y whole years:

  • Future price = amount × (1+r)y
  • Purchasing power = amount / (1+r)y

Loan / EMI

A fixed-rate amortizing loan with monthly ratei = annual rate / 12 and n = years × 12 payments:

  • EMI = P × i × (1+i)n / ((1+i)n − 1); zero rate → P / n
  • Balance after k payments = P(1+i)k − EMI × ((1+i)k − 1) / i

Each year's principal/interest split derives from balance differences, so the amortization table sums exactly to the headline totals (final balance is pinned to zero). Fees, insurance, taxes, and variable rates are excluded.

Savings goal

The inverse of compound growth with monthly contributions, monthly compounding, and end-of-period deposits (the same convention as the compound interest calculator's monthly/monthly setting, where the periodic rate is simply i = r/12). The required monthly depositC solves target = P(1+i)N + C × ((1+i)N − 1)/i; a 0% assumption divides the gap evenly, and an already-met target needs $0.

Retirement

The compound interest engine with a retirement framing: monthly contributions, monthly compounding, end-of-period deposits, overretirement age − current age years. The code delegates to the tested compound interest module rather than duplicating its formulas, so both calculators always agree. No drawdown modeling — it projects the pile, not the income it sustains.

Budget planner

Pure arithmetic over user-entered monthly figures: income = take-home + additional, expenses = Σ categories, remaining = income − expenses, savings rate = remaining / income × 100 (null, never NaN, when income is zero). The savings target is an allocationwithin the remainder — subtracted at most once — and empty category amounts count as zero.

Debt payoff

A monthly simulation with per-debt ratei = annual rate / 12: interest = balance × i, payment = min(available, balance + interest), new balance = balance + interest − payment. Minimums cover non-target debts first (capped at what each owes); the target's minimum plus extra plus freed amounts cascade down strategy-priority order — snowball (smallest balance) or avalanche (highest rate, ties to smaller balance). Because the budget is constant while interest shrinks, a budget that cannot cover one month's interest can never succeed: such plans are reported infeasible rather than given an invented date. A 600-month cap backstops the simulation.

Emergency fund

Target = Σ essential monthly expenses × coverage months (1–12); still needed is floored at zero, and months-to-target is the ceiling of the remainder over the monthly contribution — or null when no contribution is set, so no timeframe is guessed. The coverage period is a planning assumption, not a rule.

Net worth

Net worth = Σ assets − Σ liabilities, in a single user-selected currency with no FX conversion. Negative results are shown plainly. Entered property and investment figures are user estimates, not valuations.

Rounding

All math runs at full floating-point precision internally; rounding happens only when a number is displayed. Currency figures are shown without decimals, so a table row may appear off by a unit from the exact total — the underlying values always reconcile. Displayed numbers must never be fed back into a calculation as if they were exact.

What the models exclude

  • Taxes, account fees, and transaction costs.
  • Inflation — figures are nominal, not purchasing-power adjusted.
  • Return volatility — growth is modeled as smooth, not year-to-year fluctuation.

Limits and validation (compound interest)

  • Principal and contributions: 0 or more, finite numbers.
  • Annual return: 0–100%, in 0.1-point steps in the UI.
  • Duration: whole years, 1–100.
  • Inputs that would overflow to non-finite or absurdly large results are rejected with an explanatory message.

Testing

Every engine (src/lib/calculators/) is covered by automated unit tests using independently calculated expected values. The compound interest suite covers zero-rate cases, principal-only and contributions-only cases, one-year cases, beginning-vs-end timing, every compounding and contribution frequency, maximum duration and return, invalid inputs, and agreement between the headline result, schedule, and chart data. The investment return, inflation, loan, savings goal, and retirement suites cover reference values, zero-rate cases, limit behavior, validation, and the same headline↔schedule↔chart agreement. The budget, debt payoff, emergency fund, and net worth suites cover independently verified reference values, zero and boundary cases (zero income, infeasible repayment, over-funded targets, negative net worth), allocation and ordering logic, validation, and reconciliation between summaries and underlying data. React calculator islands additionally carry server-render smoke tests proving the UI displays engine-consistent figures.

Check our math

You don't have to take our word for any of this. Each calculator page shows its formulas and a worked example generated by the live calculation engine — re-enter the example inputs and confirm you get the same numbers, or verify them independently: a one-year or zero-rate case can be checked with pencil and paper (for example, $1,000 plus $100/month for 10 years at 0% must total exactly $13,000). Our automated Vitest suites insrc/lib/calculators/ do exactly this kind of checking on every change, using independently calculated expected values — but independent checking by readers is welcome, not redundant.

Report a calculation error

Found a number that looks wrong? Tell us through the contact pagewith the calculator name, the exact inputs you entered, the result you saw, and the result you expected (with your working, if possible). Concrete reports like that are what let us reproduce and fix real errors quickly.

Calculators and guides

Each calculator page documents its own formulas, worked example, assumptions, and limitations:

The concepts behind the numbers are explained in the educational guides.