Per%Sense

Help

Complete reference for the Per%Sense financial calculator.

1. Introduction

What is Per%Sense?

Per%Sense is a tool for economic analysis. Its three worksheets are so flexible and general in their format that almost any financial question you can imagine fits logically and neatly into one of them.

Per%Sense is a completely flexible fill-in-the-blank calculator. Your job is to place the numbers you know in appropriate rows and columns of one of Per%Sense's worksheets. Per%Sense determines when you have provided sufficient information to solve the problem and fills in the answers automatically.

Your input numbers are hard data, displayed on a white background. Per%Sense's computed output is soft data, displayed on a green background. Soft data is erased and recomputed each time you make a change.

What Does Per%Sense Do?

Every economic decision involves the trade-off of costs and benefits over time. Per%Sense reduces complex cash flows at different times to common terms so they can be compared directly.

Applications include:

Per%Sense also handles structured loans with advanced features: multiple balloon payments, interest-only periods, fixed principal targets, skipped payments, and combinations of monthly, weekly, and quarterly payments on the same loan.

Quick Start

  1. From the welcome screen, click one of the three worksheet buttons.
  2. Enter the values you know into the white cells. Leave the unknown(s) blank.
  3. Click Calculate (on the Mortgage screen, Calculate Row or Calculate All).
  4. Read your answers from the green cells.

To change which value is computed, clear a green cell and fill in the one that was blank before. Per%Sense automatically figures out which values to solve for based on what you've entered.

The Fill-in-the-Blank Concept

Every Per%Sense worksheet works like an equation where you choose which variable to solve for simply by leaving that cell blank. For example, on the Mortgage screen:

This principle extends to all three worksheets. On the Present Value screen, you can compute a present value (enter rate, read value) or compute an IRR (enter value, read rate). The interface adapts to your question.

Hardening Values

Sometimes you want to use a computed (green) value as the starting point for a new calculation. Hardening converts a green output cell into a white input cell, preserving its value so it won't be recalculated.

To harden a cell: double-click it, or select it and press H. The cell background changes from green to white.

This is essential for multi-step problems. For example: first compute a monthly payment, then harden it, change the loan term, and compute a balloon amount.

Opening a Legacy File (.psn)

If you used the original DOS or Windows Per%Sense, you can open your saved workspace files directly — there is no need to re-key the numbers. Click Import .psn File on the welcome screen and choose a .psn file from your computer.

Per%Sense reads the file, decides which worksheet it belongs to (Mortgage, Amortization, or Present Value), switches to that screen, and fills in the saved inputs for you. From there it behaves like any other worksheet: press Calculate to reproduce the results, or edit the numbers and recompute.

Files are read entirely in your browser session; nothing is stored on a server.

2. Quick Tour

How Per%Sense fills in blanks

Behind the scenes, Per%Sense analyzes the combination of data you have entered, determines what quantities can be computed, selects the appropriate algorithms, and routes the answers to the appropriate cells. You have only to read the output.

Each worksheet has a set of related variables connected by financial formulas. When you provide enough variables to determine the rest, Per%Sense solves the system and displays the results. If you change one input, all dependent outputs update.

Flexibility and reversibility

The same screen can answer many different questions depending on which cells you fill in. Consider the Mortgage screen:

  • "What will my payments be?" — Fill in Price, leave Monthly Total blank
  • "How much house can I afford?" — Fill in Monthly Total, leave Price blank
  • "How big a balloon do I need?" — Fill in both Price and Monthly Total, leave Balloon Amount blank

This reversibility applies to all worksheets. On the Present Value screen, entering a rate computes present value; leaving the rate blank computes an IRR.

The Mortgage screen at a glance

The Mortgage screen is designed for choosing among different loan options. Each row models a single, self-contained calculation. Fill in most cells and leave one or two blank for Per%Sense to compute.

Key operations:

  • Calculate Row — Compute the selected row
  • Calculate All — Compute every row that has data
  • Compare APR — Compare APRs of two rows to determine which loan is better
  • What-If Table — Auto-generate rows by varying one or two columns
The Amortization screen at a glance

The Amortization screen creates detailed loan schedules showing every payment split into interest and principal. Enter loan parameters at the top, click Calculate, and the full table appears below.

Advanced options enable complex loan structures: adjustable rates, balloon payments, prepayments, interest-only periods, and more.

The Present Value screen at a glance

The Present Value screen values any combination of cash flows at a single point in time. Applications include financial planning, legal settlements, annuity valuation, pension analysis, and IRR computation.

Enter single payments (lump sums) on the left, periodic payment series on the right, set a rate and as-of date, and the present value of each payment appears in the Value column.

APR overview

APR (Annual Percentage Rate) is a standard measure of the true cost of borrowing, defined by the Federal Truth In Lending Act. It takes both points and the base interest rate into account.

When no points are charged, the APR equals the quoted loan rate. When points are part of the loan, the APR rises above the base rate because points are an upfront cost spread over the loan's life.

The quoted APR is the full-term APR — the APR that corresponds to holding the loan for its full scheduled duration. If you pay off the loan early, the effective APR is higher because the upfront points cost is spread over fewer years.

Exporting schedules

From the Amortization screen, click Export CSV to download the full amortization schedule as a comma-separated file. This can be opened in Excel or any spreadsheet application.

The CSV includes columns for payment number, date, payment amount, interest, principal, remaining balance, and cumulative interest to date.

The Mortgage and Present Value screens have their own Export CSV buttons that save the current grid. Any screen can also be printed (browser Print) — the toolbar and navigation are dropped automatically so only the worksheet appears on the page.

Keyboard shortcuts and conveniences

A few conveniences speed up data entry:

  • C — calculates the current worksheet at its smallest scope: on the Mortgage screen it runs Calculate Row for the selected row only; on the Amortization and Present Value screens it runs Calculate. Skipped while focus is in the actuarial CSV box or a settings dropdown, and while a modal or the tour is open.
  • Enter — moves to the next field (and Shift+Enter to the previous one). Enter does not calculate; use C or the Calculate button when you are ready for an answer.
  • T — typed in any date field, fills in today's date.
  • H — hardens the selected mortgage cell (converts a computed green cell back to a white input); double-clicking a green cell does the same.
  • Dates format themselves — type just the digits and the MM/DD/YYYY slashes are inserted as you go. Fields also auto-advance whenever there is only one way to read what you typed: a month of 29 fills to 02/09/ and jumps to the day; a day of 49 fills to 04/09/ and jumps to the year; and a two-digit year completes to 20XX — unless you start with 19 or 20, in which case it waits for all four digits so you can type any year (e.g. a 1962 date of birth or 2019). For an ambiguous month or day that won't advance on its own (e.g. 1, which could become 1, 10, 11 or 12), just press / to commit it — 1 then / becomes 01/ and moves to the day.
  • Automatic save — your worksheet is saved in the browser as you work and restored the next time you open Per%Sense.
  • Invalid dates are caught early — when you leave a date field that holds an impossible or incomplete date (e.g. 02/30, a month above 12, or a missing year), it is outlined in red with a tooltip explaining why, and a calculation won't run until it is corrected.
  • If a calculation fails, the field(s) at fault are outlined in red so you can find the problem at a glance.
  • The moon/sun button in the header toggles light and dark mode. The Take the Tour button on the welcome screen replays the first-run walkthrough.

3. Financial Math in Plain English

New to Per%Sense — or to financial math itself? Start here. This is a plain-language walkthrough of the mathematics Per%Sense uses to value loans, mortgages, cash-flow streams, and life-contingent payments. It builds the ideas up in layers, stays high-level (no formulas you need to memorize), and assumes no prior finance background. You don't need any of it to start clicking around, but a few minutes here makes every screen make sense.

One idea, many screens

Per%Sense looks like several different calculators — a mortgage sizer, a loan amortizer, a present-value worksheet, an actuarial annuity tool. Underneath, it is one idea applied with increasing richness. That idea is the time value of money: a dollar promised in the future is worth less than a dollar in hand today, and an interest rate sets exactly how much less.

Every screen is, at heart, a way of (a) writing down a set of dated money movements, (b) translating them all to a common point in time so they can be compared and added, and (c) solving for whatever the user left unspecified. Two themes recur:

The time value of money

If the interest rate is positive, having a dollar now is strictly better than being promised a dollar later, because today's dollar can be put to work in the meantime. The reverse question — “what is a future dollar worth to me today?” — is called discounting, and it is the operation Per%Sense performs most.

Per%Sense works internally with continuous compounding, where money grows over t years at rate r by the factor er·t. Discounting is the inverse: a payment of C due t years from now is worth, today, C · e−r·t. That factor is always between 0 and 1 for a future payment, so discounting shrinks future money — the further away or the higher the rate, the more it shrinks. The continuous convention is chosen because the algebra stays clean: factors for adjacent periods simply multiply, and payment streams telescope neatly.

People don't think in continuous rates, though — a loan is quoted as, say, “6% compounded monthly.” So Per%Sense keeps two views of every rate and converts at the edges of the calculation: yield from rate is y = n·(er/n − 1), and rate from yield is r = n·ln(1 + y/n). You enter and read a familiar quoted yield; the engine computes in the continuous rate. (See True Rate, Loan Rate, and Yield.)

Worked example — discounting, and the two views of a rate
A promise of $10,000 in 5 years at a 6% continuous rate is worth today $10,000 × e−0.30 = $10,000 × 0.7408 = $7,408. And a rate quoted as 6% compounded monthly becomes the internal continuous rate r = 12 × ln(1.005) = 5.985%, which converts straight back to 6.00%. The two views describe the same money; the engine computes in one and shows the other.

Measuring time: day-count conventions

Interest is rate × time × principal, so before computing anything we must answer a deceptively hard question: how much of a year is the gap between two dates? There is no single right answer — it is a market convention, and using the wrong one produces a subtly wrong number. Per%Sense supports the common conventions:

ConventionHow a year is measuredTypical use
30/360Every month is treated as 30 days and every year as 360, with small month-end corrections.Many loans and bonds; gives clean, predictable payment amounts.
Actual / 365–366Count the real calendar days and divide by the actual length of the year (366 in a leap year).Loans where interest accrues on actual days outstanding.
Actual / 365.25Real days divided by the average year length, 365.25.Present-value problems, where a smooth average year is preferred.

The differences look small but compound across a long schedule — a 30-year mortgage has 360 interest calculations, and a fraction-of-a-day discrepancy in each moves the final balance by real money. That is why the basis is a first-class input, not a hidden default. (See Basis Days Per Year.) Internally each calendar date becomes a single running day-number, so the gap between two dates is just a subtraction, with sensible month-end behavior.

Worked example — the same six months, two conventions
From 1 January to 1 July 2024 is “half” a year — but half depends on the rule. Under 30/360 it is 0.5000 year; under an actual-day rule it is 182 days ÷ 366 = 0.4973 year. On $100,000 at 8%, one period's interest is $4,000.00 the first way and $3,978.14 the second — a $22 gap from the convention alone, which then compounds across the schedule.

The annuity: a geometric series at the core

Discounting a single payment is easy. The reason Per%Sense can value a thirty-year stream instantly is that a regular stream collapses into one formula. Take a level payment A at the end of each period for n periods. If the one-period discount factor is v (a little less than 1), the payments are worth A·v, A·v2, A·v3, … The total is a geometric series, which has a famous closed form:

PV = A · v · (1 − vn) / (1 − v)

This is the annuity factor — the single most important formula in Per%Sense. You don't add up hundreds of payments; the regularity replaces the whole sum with one expression in v and n. Almost every Per%Sense quantity is a version of it: a loan payment is the number that makes the annuity value of the payments equal the amount borrowed; a mortgage price is an annuity relationship; a pension's worth is an annuity value. Master this one formula and you have the spine of the program.

The degenerate case, handled deliberately. When the rate is exactly zero, v = 1 and the formula becomes 0/0. But the meaning is clear — with no interest, n payments of A are simply worth n·A. Per%Sense detects when the rate is near enough to zero that the general formula would misbehave and substitutes the plain count. This pattern recurs: watch for the handful of inputs where a clean formula degenerates, and supply the correct limiting value by hand.

Worked example — valuing a five-year stream
$1,000 a year for 5 years at 8% uses one-year factor v = 1/1.08 = 0.9259: the annuity factor is v(1 − v5)/(1 − v) = 3.9927, so PV = $1,000 × 3.9927 = $3,992.71. Five discountings replaced by one expression. At a 0% rate the factor would instead be the plain count, 5, giving exactly $5,000 — the degenerate case supplied by hand.

Amortizing a loan

An amortizing loan is repaid by regular payments, each part interest and part principal, until the balance reaches zero. The forward schedule is one simple recurrence: start a period owing balance B; interest accrues (rate × period length × B); the payment first covers that interest, and the rest reduces principal; the new balance is Bnew = B + interest − payment. Iterate and you get the whole schedule. Early on the balance is large, so most of each payment is interest; as the balance falls, more goes to principal.

The level payment inverts the annuity. What payment retires the loan in n periods? The one whose payments, discounted at the loan rate, total the amount borrowed — the annuity relationship read backwards. Because the principal appears linearly, this is clean algebra, no trial and error. The same idea solves instead for the number of payments, or (with more work) the rate.

Real loans depart from the textbook case in well-defined ways, each a precise modification of the basic recurrence rather than an ad-hoc tweak:

VariationThe idea
Payment in advancePayments fall at the start of each period (an annuity-due); each arrives a period sooner, so it's worth slightly more and the required payment is a touch smaller.
Odd first periodThe gap from closing to the first payment is rarely exactly one period; that first period's interest is prorated by the true length of the stub.
Rule of 78An older method that front-loads interest by sum-of-the-digits weights — reproduced as a linearly declining interest charge adding up to the same total finance charge.
U.S. RuleUnpaid interest is tracked separately and never itself charged interest; the program carries a side bucket of uncovered interest.

Beyond level payments, the cash-flow stream can be sculpted — balloons, prepayments, rate adjustments, a moratorium, a target, and skipped months. Mathematically none of these change the engine: the period-by-period recurrence simply consults, at each date, whatever events apply. The richness lives in the schedule of events, not in new mathematics.

Worked example — a car loan
Borrow $25,000 over 5 years (60 monthly payments) at 6% (0.5%/month). The level payment is the annuity inversion: $25,000 × 0.005 / (1 − 1.005−60) = $483.32. The first payment splits into $125.00 interest and $358.32 principal, leaving $24,641.68; iterating that split lands the balance exactly on zero at payment 60.

The present value of arbitrary cash flows

The Present Value screen generalizes the loan idea: instead of one borrower and a level payment, value any collection of dated amounts against a chosen valuation date. Two kinds of flow are allowed — single payments (a lump on a date) and periodic streams (a level amount paid so many times a year between two dates). Each lump is discounted by the time-value factor; each stream by the annuity factor; the grand total is their sum, all expressed as of the common as-of date. Same discount-and-sum recipe, over a freely chosen set of flows.

Escalating payments (COLAs). Pensions and settlements often grow over time. A stream can carry a cost-of-living rate, so two forces act on each payment: it grows with escalation and shrinks with discounting. Their net effect is one combined factor, and the stream is again a geometric series — the annuity machinery carries straight over. If a stream grows at exactly the discount rate the two forces cancel (every payment is worth the same today), the ratio becomes 1, and Per%Sense substitutes the plain count rather than dividing by zero — the same care as the zero-rate annuity.

Streams that run forever. A perpetuity has a finite value only if discounting outruns growth; if growth keeps pace or exceeds it, the value is infinite, and Per%Sense says so rather than returning a meaningless number — the honest mathematical answer.

Worked example — an escalating pension
$12,000 a year, rising 3% annually, for 20 years, discounted at 6%: growth and discounting combine into one net ratio, giving a present value of about $174,800. Had it grown at the full 6% — matching the discount rate — every payment would be worth the first payment's value, $11,321, so the whole stream is simply 20 × $11,321 = $226,415, the growth-equals-discount degeneracy.

Mortgages and the true cost of borrowing

A mortgage screen is an annuity problem dressed in home-buying vocabulary — price, down payment, points, monthly payment — plus two questions unique to comparing loans. The quantities are tied by simple relationships: the amount financed is price less down payment; the cash needed is down payment plus points; the monthly payment is the annuity payment that amortizes the financed amount, plus a flat tax-and-insurance allowance that is added on but never amortized. Because the relationships are mutually consistent, you specify whichever subset you know and the program rearranges them to fill in the rest.

APR is the true cost as an internal rate of return. The quoted rate isn't the true cost, because the borrower pays points up front and so receives less cash than the face amount. The APR answers: what single rate, applied to the money actually advanced, reproduces the payments the borrower makes? Formally it is the discount rate at which (present value of all payments and any balloon) = (amount financed) × (1 − points). Because points reduce the cash advanced but not the payments, the APR is always at least the note rate — more so on a shorter loan, over which the points are spread thinner. This rate has no closed form, so it is found by the iterative solver. (See APR comparisons.)

The crossover. Low-rate-high-points versus high-rate-low-points: the high-points loan only pays off if you keep it long enough to amortize those points. Per%Sense finds the crossover — the holding period at which the two loans' effective costs are exactly equal — by solving two cost equations simultaneously for a rate and a time.

Worked example — sizing a mortgage and its true cost
$200,000 home, 20% down, 2 points, 30 years at 6%: amount financed $160,000; cash needed $40,000 + $3,200 points = $43,200; monthly principal-and-interest is the annuity payment for $160,000 at 0.5%/month over 360 months = $959.28. Because the 2 points mean the borrower receives only $156,800, the true cost — the rate that discounts the 360 payments back to $156,800 — is an APR of about 6.24%, a little above the 6% note rate. That last figure has no closed form; it is found by the solver.

Life contingencies: paying only if…

The most sophisticated screen values payments that happen only under a condition involving human life — an annuity that continues only while someone is alive, or a benefit paid when someone dies. It is a graceful extension of everything so far. If a payment will be made only if a person is alive on its date, then from today's vantage point it is uncertain, and the right way to value an uncertain payment is its expected present value: the ordinary present value, multiplied by the probability the payment actually happens.

value = (amount) × (discount factor) × (probability the condition holds)

Those probabilities come from a mortality table, which records how many of a large starting population survive to each age. The chance a person now aged x is alive t years later is just the ratio of survivors at age x+t to survivors at age x (the program interpolates smoothly between whole-year entries). Each life-contingent payment is weighted by the survival probability for its date, so the annuity becomes a life annuity — valued payment by payment, since the weight differs at every date.

With two people the condition can be richer — pays while both are alive (joint life), while either is alive (last survivor), or while exactly one survives. Assuming independent lives these combine by elementary probability (both-alive is the product of the two survival probabilities; either-alive is one minus the product of the two death probabilities). A payment on death sums, over each possible year of death, the benefit × the probability of dying that year × the discount factor. In every case the principle is unchanged: discount each possible cash flow, weight it by the probability it occurs, and add. (See Life Contingency.)

Worked example — a life annuity (illustrative survival)
Value $10,000 a year while a 70-year-old survives, discounted at 5%. Each year's payment is worth its discounted value times the chance of being alive to collect it. Over the first five years the life annuity is worth about $38,332, against $43,142 for a certain annuity that pays regardless — the ~$4,800 difference is the mortality discount, the value of payments that may never fall due. (The survival figures are illustrative; the principle is exact.)

How a calculation actually proceeds

Follow one calculation from the moment you press Calculate. Step one: read the screen by counting. Every row has a small number of defining quantities (a lump: its date, amount, and value; a stream: two dates, amount, and value; the screen: a rate and an as-of date). Per%Sense counts, on each row, how many are supplied and how many are blank, and classifies it:

What the count showsWhat it meansWhat the program does
Exactly the right number presentFully specifiedCompute it forward: discount and add.
Missing exactly oneContains an unknownSolve it backward against a target.
Too few presentUnder-determinedAsk for more input.
More than enough, and they conflictOver-determinedWarn; do not silently pick one.

This counting is the mathematical content of “fill in the blanks”: one unknown is one equation in one unknown (solvable); zero is something to evaluate; two or more is ambiguous. Step two: choose a direction — everything specified runs forward; exactly one blank with a target runs backward; two blanks has no unique answer and the program says so. Step three: invert directly, or search. If the unknown enters linearly (a loan amount, a level payment, a single lump's value) it is isolated by algebra in one exact step. If it is tangled — a rate buried inside the discount exponentials, a date that changes both the count of payments and how far each is discounted — no rearrangement frees it, and the program builds an error function and hands it to the iterative solver.

The iterative solver, in brief

When the unknown cannot be isolated, Per%Sense finds it by successive approximation — the same method across every screen. It never works on the unknown directly; it works on an error function g(x): a single number, depending on a guess, that is positive when the guess is too far one way, negative the other, and exactly zero when right. Solving the screen becomes finding the root of g. Two natural choices of g are used: a leftover-balance error (run the whole amortization schedule at the guess and read the balance remaining — zero means the loan retires exactly), and a value-gap error (compute the present value the guess produces and subtract the target). Both are built to move steadily in one direction, guaranteeing a single crossing.

To drive g to zero, Per%Sense uses the secant method — Newton's method with the slope estimated from the two most recent evaluations rather than a derivative (the error functions are simulations, with no tidy slope formula). When the error is smooth this is very fast, the number of correct digits roughly doubling each step. The bare iteration is wrapped in safeguards that make it dependable: a smart first guess near the answer, damping that caps each jump, a “best-so-far” memory, a restart from a fresh seed if it stalls, and an honest non-convergence report if a maximum number of steps is reached. Where the error is not smooth — the amortization leftover jumps when the number of payments flips — the program falls back to bisection, which only ever asks “is the root above or below this midpoint?”, cannot be fooled by a discontinuity, and cannot diverge. The mortgage crossover solves for two unknowns at once by the same idea generalized to a small two-by-two system. And some inversions are genuinely ill-posed — asking for the date of a life-contingent payment from its value, where the survival weight depends on the very date being solved — so the program recognizes them and declines rather than returning a number a confused search happened to stop at.

Worked example — solving for an APR, step by step
A 12-month loan with payment $888.49, but charging 2 points, so the borrower receives $9,800. The true monthly rate is the one at which the payments discount back to $9,800; the error is g(r) = (value at r) − $9,800. Starting from two nearby guesses, the secant iteration runs 1.000% (error +$200) → 1.200% (+$73.8) → 1.317% (+$2.9) → 1.322% (−$0.1) — each guess the point where the line through the two previous (rate, error) points crosses zero. Four evaluations reach the cent, settling on roughly a 15.9% APR, well above the 12% note rate because two points on a one-year loan are costly.

Rounding, precision, and trust

Financial answers must be reproducible to the cent. Two concerns get deliberate care. Rounding is a definition, not an afterthought: money is carried to the cent, and the tie-breaking rule at exactly half a cent must be fixed and applied uniformly or two correct calculations can disagree by a penny. Per%Sense uses one consistent rule (a tie rounds down, toward zero) at the same points every time. Precision near the edges: several formulas involve tiny differences of nearly-equal numbers (the annuity factor when the rate is near zero, a logarithm of a number near one), exactly where naive computation loses accuracy — so the program substitutes mathematically equivalent short-series expressions there. Together these make the results deterministic and auditable: the same inputs always produce the same figures, and every figure traces to a defined calculation.

Why it all works

Step back and the whole edifice rests on one idea, extended in layers. At the base is the time value of money: a future amount is worth its discounted value today. Add that a regular stream of discounted payments forms a geometric series, and the valuation of any level stream collapses into a single annuity formula. That formula is the engine — a loan's payment is its inversion, a schedule is a one-line recurrence iterated, a mortgage is annuity relationships, a present-value worksheet is annuities and lumps summed against a common date, a life annuity is the same sum weighted by survival. Nothing genuinely new is added as the problems grow richer — only more elaborate cash-flow shapes fed through the same discount-and-sum machinery. On top sits the inverse problem (solve for any one quantity), handled by clean algebra where the unknown is linear and reliable numerical search where it is not, all wrapped in a discipline of precision. That is why Per%Sense gives, for a level loan or an adjustable mortgage with a balloon or a joint-life pension alike, the right answer for the right reason.

Adapted from the Per%Sense Financial Math Explainer (code_docs/Persense_Financial_Math_Explainer_DOS.pdf), derived from the original DOS application.

4. Mortgage Screen

Overview

The Mortgage screen is designed for choosing among different loan options:

Each row in the grid is a separate, self-contained calculation. You can have multiple rows active for comparison.

The Mortgage Grid

ColumnDescription
PriceTotal purchase price of the property.
PointsOne-time bank charge at settlement. 1.0 points = 1% of the amount borrowed, paid to the bank at closing.
% DownDown payment as a percentage of the purchase price. This column, Cash Required, and Amount Borrowed are grouped — fill in exactly one of the three.
Cash RequiredSum of the down payment plus the value of points. Generally the bulk of money needed at closing (title insurance and other fees are additional).
Amt BorrowedThe loan amount, equal to the purchase price minus the down payment.
YearsDuration of the mortgage (e.g. 15, 20, or 30 years).
Loan RateQuoted annual interest rate from the bank. Equals APR only when Points = 0.
Mo Tax+InsMonthly real estate taxes plus homeowner's insurance (annual amount ÷ 12). Most banks require insurance and often escrow both tax and insurance into your monthly bill.
Monthly TotalTotal monthly mortgage payment including principal, interest, taxes, and insurance.
Balloon YrsYears from settlement until a balloon (lump) payment is due (optional). On its own this does not shorten the loan — payments still run the full Years term. See "Two kinds of balloon" below.
Balloon AmtLump-sum balloon payment (optional). Leave it blank, with Balloon Yrs filled, to solve for it. What it computes depends on Years — see "Two kinds of balloon" below.
APRComputed Annual Percentage Rate. Always an output (green) cell.

Calculation rules

Two kinds of balloon

"Balloon" can mean two different things, and this screen handles both. The difference is entirely in what you put in Years — because Years is how long you actually make the regular payment, not the amortization assumption.

Common mix-up: for a payoff balloon, you must change Years to the payoff year. Leaving Years at 30 with a full monthly payment makes the balloon solve to ~$0 — the payment already retires the loan, so no balloon is owed.

The same remaining-balance figure is also available on the Amortization worksheet via its "Payoff as of" date, if you'd rather see the full schedule.

The Mortgage screen always uses a 360-day calendar and is not affected by Computational Settings.

Using the Mortgage Screen

  1. Click Mortgage Worksheet from the welcome screen.
  2. Click on a row to select it (the selected row is highlighted).
  3. Enter values into the white cells. Leave one or two cells blank.
  4. Click Calculate Row (or Calculate All to compute every row that has data).
  5. Computed values appear in green. APR is computed automatically when sufficient data is present.

APR and Loan Comparisons

To compare two mortgages:

  1. Enter data for both loans on two separate rows.
  2. Click Calculate All so both rows have computed APRs.
  3. Click Compare APR.

Per%Sense compares the full-term APRs and reports which loan is better. When the loans differ in points, one loan may be better for short holding periods and the other for long periods. Per%Sense identifies the crossover point.

In general: if you plan to sell the house soon, prefer lower points. If you plan to stay long-term, prefer the lower base rate (even with higher points).

"What-If" Tables

Sometimes it's helpful to see the results of several different financing scenarios:

To generate a what-if table:

  1. Calculate a starting row first.
  2. With that row selected, click What-If Table.
  3. Choose the column(s) to vary, the increment, and how many lines to generate.
  4. Click Generate. New rows are created with varied values and automatically calculated.

You can vary two columns simultaneously for a combinatorial table. For example, varying both Years and Rate produces (N+1) × (M+1) rows covering all combinations.

Mortgage Examples

Note on numeric values: The Mortgage screen uses continuous-compounding interest (matching the original DOS source), while the textbook discrete-compounding formula taught in finance courses gives slightly different numbers. The values shown below match what the program actually produces. For a $100,000 loan at 8.5% over 30 years the difference is about $2/month. See docs/discrepancies.md §1 for details. The Amortization screen uses discrete compounding and will produce a slightly different schedule for the same nominal inputs.
Example 1: Computing Monthly Payments
You purchase a house for $200,000 and take a 20-year mortgage at 8% with 2 points. You put down 20% and expect monthly taxes and costs to be $200. What is the total amount due monthly?
Type these into a row, leave the rest blank: Price = 200,000, Points = 2.00, % Down = 20, Years = 20, Loan Rate = 8.0000, Tax+Ins = 200. (Don't type Cash Required, Amt Borrowed, or Monthly Total — those will be computed.)

Then press Calculate Row:

Price Points %Down Cash Req Amt Borrow Yrs Rate Tax+Ins Monthly Total 200,000.00 2.0000 20.0000 43,200.00 160,000.00 20 8.0000 200.00 1,538.30

Cash Required = $40,000 down payment + $3,200 in points = $43,200. The $1,538.30 monthly total is the principal+interest payment of $1,338.30 plus the $200 tax/insurance.

Example 2: How Much House Can You Afford?
You have $56,000 from the sale of your condominium, and you can make payments of $1,650/month including taxes and insurance of $200. The bank charges 1.5 points and 8.5% interest on a 30-year mortgage.
Type these into a row, leave the rest blank: Points = 1.5, Cash Required = 56,000, Years = 30, Loan Rate = 8.5000, Tax+Ins = 200, Monthly Total = 1,650. (Don't type Price, % Down, or Amt Borrowed — those will be computed.)

Then press Calculate Row:

Price Points %Down Cash Req Amt Borrow Yrs Rate Tax+Ins Monthly Total 241,749.12 1.5000 21.9944 56,000.00 188,577.78 30 8.5000 200.00 1,650.00

This illustrates the fill-in-the-blank concept: by entering Monthly Total and leaving Price blank, Per%Sense solves the problem in reverse.

Note: the computed cells in the actual program appear with an accent border, green tint, and italic text. To run this example a second time with different inputs, click Clear Row first, or double-click a green cell to harden it as input.

Example 3: Balloon Payment Amounts
You want to buy a house for $280,000. With 20% down, the bank provides 30-year financing at 8.25% with 2.5 points. Including $300/month for tax and insurance, you want to keep payments below $1,600 by scheduling an 8-year balloon. How much does the balloon need to be?
Type these into a row, leave the rest blank: Price = 280,000, Points = 2.5, % Down = 20, Years = 30, Loan Rate = 8.25, Tax+Ins = 300, Monthly Total = 1,600, Balloon Yrs = 8. (Leave Balloon Amt blank — that's what we're solving for.)

Then press Calculate Row:

Price Points %Down Cash Req Amt Borrow Yrs Rate Tax+Ins Monthly Bal Yrs Bal Amt 280,000.00 2.5000 20.0000 61,600.00 224,000.00 30 8.2500 300.00 1,600.00 8 98,372.47

A balloon of about $98,372 in 8 years reduces your monthly payments to $1,600. If you round the balloon up to a tidier $100,000, the monthly drops slightly to $1,593.67 (re-run with Balloon Amt = 100,000 and leave Monthly Total blank).

Example 4: 30-Year Payments with 15-Year Balloon
An 8.1% mortgage for $240,000 is amortized at 30 years but capped with a 15-year balloon. What are the payments and balloon?

Step 1: Compute the 30-year monthly payment. Type Price = 240,000, % Down = 0, Years = 30, Loan Rate = 8.1. Press Calculate Row.

Price Points %Down Cash Req Amt Borrow Yrs Rate Monthly 240,000.00 0 0 0.00 240,000.00 30 8.1000 1,777.79

Step 2: Double-click the computed Monthly Total cell to harden it (converts the green/computed value into a typed input). Then change Years from 30 to 15 and type Balloon Yrs = 15. Both must be filled in — the engine needs Balloon Yrs to know there's a balloon to solve for. Leave Balloon Amt blank. Press Calculate Row again.

Price Points %Down Cash Req Amt Borrow Yrs Rate Monthly Bal Yrs Bal Amt 240,000.00 0 0 0.00 240,000.00 15 8.1000 1,777.79 15 184,912.27

This demonstrates the harden feature: you use a computed value as input for a follow-up calculation. The balloon of ~$184,912 in 15 years lets the borrower keep the lower 30-year payment but settle the remaining principal at the halfway point.

Example 5: Low Points or Low Base Rate?
Which is better: an 8.1% mortgage with 3 points, or an 8.5% mortgage with 1 point?

Enter data for both mortgages on two separate rows. The price and down payment are irrelevant to this comparison, but Years must be the same on both rows.

Row 1: Price = 100,000, % Down = 0, Years = 30, Loan Rate = 8.1, Points = 3.
Row 2: Price = 100,000, % Down = 0, Years = 30, Loan Rate = 8.5, Points = 1.

Click Calculate All to compute both rows, then click Compare APR:

Mortgage A: Loan Rate 8.1000%, 3 points, full-term APR = 8.4257% Mortgage B: Loan Rate 8.5000%, 1 point, full-term APR = 8.6094% APRs cross at 6 years, 10 months (effective APR at crossover = 8.6984%). If you hold the mortgage longer than that, Mortgage A is the better deal; shorter, Mortgage B wins because the upfront point cost on A hasn't amortized.

Rule of thumb: choose lower points if you plan to be in the house less than ~7 years; choose the lower base rate otherwise.

Example 6: What-If Table
How does the monthly payment on a $100,000 mortgage depend on the interest rate, from 7% to 9%?

Start with one row: Price=100,000, %Down=0, Years=30, Rate=7.0000. Calculate it (Monthly = $665.30).

With that row selected, click What-If Table. Set Column = Loan Rate, Increment = 0.25, Lines = 8.

Rate Monthly Total 7.0000 665.30 7.2500 682.18 7.5000 699.21 7.7500 716.41 8.0000 733.76 8.2500 751.27 8.5000 768.91 8.7500 786.70 9.0000 804.62
Example 7: Double What-If
How does the monthly payment on a $100,000 mortgage depend on both interest rate (7% to 8.5%) and loan duration (15 to 30 years)?

Fill in the source row first with everything Calc needs in order to produce a Monthly Total: Price = 100,000, % Down = 0, Years = 30, Loan Rate = 7.0000. (Optionally click Calc — you should see Monthly Total = $665.30 on this row.) The What-If expansion carries every filled-in field of the source row over to each generated row, so if Price or % Down is blank up front the generated rows have no way to compute Monthly Total.

With that row selected, click What-If Table. Set Column 1 = Loan Rate, Increment = 0.25, Lines = 6. Open the second variable section: Column 2 = Years, Increment = -5, Lines = 3.

This generates (6+1) × (3+1) = 28 rows covering all combinations of rate and duration.

Yrs Rate Monthly 30 7.0000 665.30 25 7.0000 706.78 20 7.0000 775.30 15 7.0000 898.83 30 7.2500 682.18 ...and so on for all 28 combinations
Example 8: Cash Needed at Closing
You're buying a $350,000 house with 20% down and 1 point, on a 30-year loan at 6.5%, with $400/month for taxes and insurance. How much cash do you need at closing, and what's the monthly payment?

Fill in one row: Price = 350,000, % Down = 20, Points = 1.0, Years = 30, Loan Rate = 6.5000, Mo Tax+Ins = 400. Leave Cash Required, Amt Borrowed, and Monthly Total blank, then click Calculate Row.

Per%Sense fills in: Amt Borrowed = $280,000 (price minus the 20% down payment), Cash Required = $72,800 (the $70,000 down payment plus $2,800 for one point on the $280,000 loan), and Monthly Total = $2,169.79 ($1,769.79 principal & interest plus the $400 tax and insurance). The APR is 6.5969% — higher than the 6.5% note rate because it folds in the cost of the point.

This is the fill-in-the-blank concept at work: Cash Required, Amt Borrowed, and Monthly Total are all outputs here because you supplied Price, % Down, and the loan terms. To work from a cash budget instead, fill in Cash Required and leave Price blank — see Example 2.

5. Amortization Screen

Overview

The Amortization screen is a flexible loan analysis tool. Use it to create amortization schedules or compute payment amounts for complex, structured loans.

An amortization table (or schedule) is a list of loan payments in which each payment is divided into interest and principal parts. Per%Sense amortization tables also include cumulative interest to date and the remaining balance.

Basic Loan Information

ColumnDescription
Amt BorrowedThe principal amount of the loan.
Loan DateSettlement date / date the loan originates.
Rate %Quoted annual interest rate.
1st Pmt DateDate of the first regular payment. Optional — if left blank, Per%Sense defaults it to one period after the loan date (e.g. monthly loans get a first payment one month after settlement).
# PeriodsTotal number of payments. Can be left blank if the Last Pmt Date is supplied; Per%Sense derives it.
Last Pmt DateDate of the final regular payment. Computed automatically from First Pmt Date + # Periods, but you can also supply it directly and leave # Periods blank.
Pmts/YrPayment frequency: 1=annual, 2=semi-annual, 4=quarterly, 12=monthly, 24=semi-monthly, 26=biweekly, 52=weekly.
Pmt AmountRegular payment amount. Leave blank to have Per%Sense compute it from the loan principal, rate, and term.
PointsDiscount points charged at settlement, entered as a number of points (1 point = 1% of Amt Borrowed). Used only to compute the APR — it does not affect the payment schedule. Leave 0 for no points.
APR %Computed Annual Percentage Rate including the cost of points, reported as an effective annual yield. Computed automatically (output, green cell) whenever Points is non-zero; equals the loan rate when Points is 0.
BasisDay-count basis: 360 (standard), 365 (actual days), or 365/360 (hybrid).

Field-Presence Behavior

Per%Sense automatically derives the missing field when you supply enough of the others. The Amortization screen recognizes these combinations:

Using the Amortization Screen

  1. Enter Amount Borrowed, Loan Date, Rate, 1st Payment Date, # Periods, and Pmts/Year.
  2. Leave Payment Amount blank to have it computed — or, instead, leave Amount Borrowed or Rate blank, and Per%Sense back-solves whichever one you omitted (see Examples 1d–1f). Leaving both Amount and Rate blank is the term-derivation shortcut of Example 1c.
  3. Click Calculate.
  4. The schedule table appears below, with the computed payment shown in the summary bar.

Payoff / Balance

After generating a schedule, enter any date in the Payoff as of field. Per%Sense calculates the remaining loan balance at that date. This is useful for determining how much you'd owe if you sold the house or refinanced.

The figure is a payoff quote, not the running schedule balance. It is the principal still outstanding as of the most recent payment plus the interest accrued from that payment up to the as-of date — and it does not credit the scheduled payment falling on that date, since a payoff retires the whole loan rather than making that installment. Early in a high-rate loan the quote can therefore exceed the original amount borrowed: little principal has amortized yet, so a full period's accrued interest more than offsets the small paydown. (The loan is not growing — you are just seeing near-full principal plus one period of unpaid interest in a single number.)

Why the payoff can be larger than the amount borrowed
A $500,000 loan at 12% (monthly, actual/365, loan date 01/01/2026, first payment 02/01/2026, 3 points) shows a Balance as of 04/01/2026 of $504,237.45 — more than the $500,000 borrowed. Why?

04/01/2026 is a payment date. The principal owed right after the 03/01/2026 payment is $499,150.22. One period of interest then accrues, 03/01 → 04/01 (31 days): 499,150.22 × 0.12 × 31/365 = $5,087.23. The payoff is 499,150.22 + 5,087.23 = $504,237.45.

Note this uses the balance before the 04/01 payment plus that period's interest — it does not apply the scheduled $5,273.39 installment (which would leave the schedule's running balance of $498,964.06). The gap between the two figures is exactly one payment. Because each early payment at 12% is almost entirely interest (only about $180–670 of principal), the balance has barely moved off $500,000, so adding a full month's ~$5,087 of interest pushes the quote above the original principal.

Payoff lookup runs both directions
You plan to refinance once the loan balance falls to $150,000. On a $250,000, 30-year, 6% loan (monthly, loan date 01/01/2024), on what date does that happen?

Generate the schedule first (Amount = 250,000, Loan Date = 01/01/2024, Rate = 6.0000, Per/Yr = 12, # Periods = 360). Then, instead of typing a date, type 150,000 into the Payoff Balance field. Per%Sense fills in the Payoff Date — the date the scheduled balance first drops to $150,000.

The lookup is bidirectional: type a date to read the balance on that date (as before), or type a balance to read the date it is reached. If the balance is never reached, the date field reports "(not reached)".

CSV Export

Click Export CSV to download the full amortization schedule as a comma-separated file for use in Excel or other spreadsheet applications.

Advanced Options

The Advanced Options section (click to expand) supports complex loan structures. Filling in any Advanced field automatically switches Per%Sense into fancy mode, which runs a period-by-period engine that honors all the options below.

Additional Periodic Payments

Recurring extra payments. For example, an extra payment each December to accelerate the loan payoff. Specify start date, frequency, and amount, then bound the series in one of two ways: give a stop date, or give a number of payments — the extra payments end at whichever limit is reached. (Supplying both is allowed; the series ends at whichever comes first.)

Added on top, or in place of, the regular payment? The same computational setting that governs balloons — "Balloon / prepayment includes regular pmt" — also controls these extra payments. With the default (NO) each extra is paid in addition to the regular payment; with YES the amount you enter replaces the regular payment that period (a payment schedule). The same number can mean very different things under the two settings — see Advanced Solver Example E.

Balloon Payments

One-time lump sum payments applied to principal. Some mortgages are structured with lower monthly payments and a balloon that makes up the difference. The computational setting "Balloon / prepayment includes regular pmt" controls whether the regular payment is also due on a balloon date (and, with the same switch, on a prepayment date).

Enter one row per balloon: a Date and an Amount. A balloon can fall on a regular payment date or between payments — off-cycle balloons are applied to principal on their exact date, not folded into the next payment. A balloon may not precede the first regular payment (or, if a moratorium is in force, the first principal-repayment date); see Input Validation. To model a skipped payment rather than an extra one, enter a $0 balloon with the includes-regular-payment setting turned on.

Rate/Payment Adjustments

For adjustable-rate mortgages (ARMs): change the interest rate and/or the payment amount on a specific date during the loan. Enter one row per adjustment with its effective Date, and a new Rate, a new Payment, or both.

Adjustments must fall strictly inside the loan: an adjustment date on or before the Loan Date, on or after the Last Payment Date, or sharing a date with another adjustment is rejected (see Input Validation).

Moratorium

An interest-only deferment at the start of the loan: until the date you specify, each payment covers only the accrued interest and the principal balance does not fall. Enter the date on which normal principal repayment resumes (the first principal-repayment date).

From the loan date until that date the borrower pays interest only; on and after it, payments amortize principal as usual over the remaining term. The moratorium date must be on or after the first regular payment date. A balloon may not be scheduled during the interest-only window — it cannot precede the first principal repayment (see Input Validation). Moratoriums are common in construction loans and seasonal-income loans, where the borrower needs breathing room before full payments begin.

Target Principal Reduction

Force a minimum amount of principal to be retired each period. If the regular payment wouldn't reduce principal by at least the target, Per%Sense raises that period's payment so it does.

Use it to guarantee a loan pays down at a chosen pace regardless of the rate — for instance, "at least $1,000 of principal every month." The target must be reachable: it may not exceed Amount ÷ # Periods (otherwise the loan could never retire its principal in the given term), and you cannot back-solve for the loan Amount while a target is in force, because the two would be mutually under-determined. Both are reported as errors (see Input Validation). When a target and a skip-month fall on the same period, the target wins — the minimum principal reduction still applies, overriding the skip.

Skip Months

Specify calendar months in which no payment is made, using a compact notation: a comma-separated list of month numbers and ranges, where 1=January … 12=December. For example 6-8,12 skips June, July, August, and December every year the loan is active.

Skipped payments make no contribution that period, so interest accrues and is picked up by later payments — lengthening the effective payoff or enlarging the final payment. Skip Months models a seasonal borrower (for example, a business that closes over the summer). Note the interaction above: if a Target Principal Reduction is also set, the target overrides the skip for any period where both apply, matching the original DOS behavior. To suppress a single specific payment instead of a recurring month, use a $0 balloon with the includes-regular-payment setting on.

Input Validation

Per%Sense rejects loan configurations that are internally inconsistent before generating a schedule, so you don't silently get a wrong answer. The Amortization screen surfaces these errors:

ErrorTrigger
"first date must not be after last date"1st Pmt Date is later than Last Pmt Date
"two rate adjustments on the same day"Two ARM adjustments scheduled for the same date
"rate adjustment cannot precede the loan"Adjustment date is on or before the Loan Date
"rate adjustment cannot fall on or after the last payment"Adjustment date is on or after the Last Pmt Date
"balloon cannot precede the first regular payment"Balloon date is before the 1st Pmt Date
"balloon cannot precede the first principal repayment (moratorium)"Balloon scheduled before the moratorium ends
"principal repayment cannot precede the first regular payment (moratorium)"Moratorium first-repay date is before the 1st Pmt Date
"principal reduction target is too high"Target principal reduction exceeds Amount ÷ # Periods (i.e. mathematically unreachable)
"cannot solve for loan amount with target principal reduction"Trying to back-solve for the loan amount while a target reduction is in force (over-determined)
"Amount Borrowed is blank and could not be solved (…)"Amount Borrowed left blank for the back-solver, but the screen is missing the Rate, Pmt Amount, term, or first-payment date the solve needs (see Example 1e)
"Rate is blank and could not be solved (…)"Rate left blank for the back-solver, but the screen is missing the Amount, Pmt Amount, or term the solve needs (see Example 1f)
"Prepayment row N: <field> is required"An Additional Periodic Payments row is missing its Start Date, Amount, or Pmts/Yr — the row is named so you can see which one to fix
"Balloon row N: <field> is required"A Balloon row is missing its Date or Amount

A Rate/Payment Adjustment row may now also be a date-only entry (no new Rate, no new Pmt Amount). Per%Sense treats that as AO7 — re-amortize at current rate: it re-solves the regular payment over the remaining term at the unchanged rate. That matters when a future balloon (or drift from a prior adjustment) means the running payment no longer amortizes the loan cleanly.

Pennies and Rounding

Per%Sense amortization schedules are accurate to the penny. Rounding discrepancies that accumulate over the life of the loan are absorbed in the final payment, which may differ slightly from the regular payment amount.

Settings That Affect Amortization

Several Computational Settings affect amortization calculations:

Amortization Examples

Example 1: Simple Amortization Table
Create an amortization schedule for a $100,000 loan at 8%, 30 years, monthly payments starting 03/01/2024, loan date 02/12/2024. Settings: 360-day basis, prepaid interest YES.

Enter Amount=100,000, Loan Date=02/12/2024, Rate=8.0000, 1st Pmt Date=03/01/2024, Periods=360, Pmts/Yr=12. Leave Payment blank.

Per%Sense computes Payment = $731.98.

The first period is short: the loan closes on 02/12/2024 but the first regular payment isn't until 03/01/2024 (19 days later under the 360-day basis, which uses 30-day months). Pmt #1's interest portion is therefore $422.22 rather than the full $666.67 a standard month would accrue, so a slightly larger share goes to principal in the very first payment. Because that first period is short, Per%Sense adjusts the regular payment so the loan still amortizes in exactly 360 payments — giving $731.98, slightly below the $733.76 a plain whole-month schedule would show. (Leave the first-payment date blank for a natural, whole-month first period and the payment is the plain $733.76 — see Example 1b.) Total interest over the 30-year schedule is $163,513.84.

Example 1b: Omitting the First Payment Date
Same $100,000 loan as Example 1, but you only know the loan date and the payment frequency — the first payment date wasn't explicitly written down.

Enter Amount=100,000, Loan Date=02/12/2024, Rate=8.0000, Periods=360, Pmts/Yr=12. Leave 1st Pmt Date blank.

Per%Sense automatically defaults 1st Pmt Date to one period after the loan date (03/12/2024). That makes a natural, whole-month first period, so the computed Payment is $733.76 — the plain amount, slightly above Example 1's $731.98. The difference is exactly the odd-first-period effect: Example 1's explicit 03/01 first payment created a short 19-day first period, which lowers the payment to $731.98, whereas leaving the date blank here defaults to a full month and needs no adjustment.

Example 1c: Deriving Term from First and Last Payment Dates
You know your loan starts 02/01/2024, ends 01/01/2054, and pays monthly — how many payments is that?

Enter 1st Pmt Date=02/01/2024, Last Pmt Date=01/01/2054, Pmts/Yr=12. Leave # Periods, Amount, and Rate blank.

Per%Sense fills in # Periods = 360. This is a term-derivation shortcut: when Amount and Rate are both blank, Per%Sense skips schedule generation entirely and just answers the dates-to-payments question. To get a full schedule alongside the derived term, fill in Amount and Rate as well.

Example 1d: Computing the Payment (Solve Payment)
You're borrowing $250,000 at 6% over 30 years (monthly). What's the payment?

Enter Amount=250,000, Loan Date=01/01/2024, Rate=6.0000, 1st Pmt Date=02/01/2024, Periods=360, Pmts/Yr=12. Leave Pmt Amount blank.

Per%Sense computes Pmt Amount = $1,498.88 using the closed-form annuity formula. This is an exact solve, not just an estimate.

(For a quick sanity check: solving for the loan amount from this payment, rate, and term recovers the original $250,000 within a few cents — see Example 1e.)

Example 1e: Computing the Loan Amount (Solve Amount)
A lender quotes a payment of $1,498.88 per month at 6% over 30 years (monthly). How much does that payment let you borrow?

Enter Rate=6.0000, Loan Date=01/01/2024, 1st Pmt Date=02/01/2024, Periods=360, Pmts/Yr=12, Pmt Amount=1,498.88. Leave Amount Borrowed blank.

Per%Sense back-solves Amount Borrowed = about $250,000.61 — essentially the $250,000 of Example 1d. The ~61¢ excess is an artifact of the quoted payment having been rounded to whole cents (the exact solved value, $250,000.6150, sits right on the half-cent line); an un-rounded payment recovers exactly $250,000. The solved amount appears in the Amount Borrowed cell with the computed-value highlight, and a full schedule is generated alongside it.

Solving for the amount needs Rate, Pmt Amount, # Periods, Pmts/Yr, and a first-payment date. As in Example 1b, the 1st Pmt Date may be left blank — Per%Sense defaults it to one period after the Loan Date before solving.

Example 1f: Computing the Loan Rate (Solve Rate)
You borrowed $250,000 over 30 years (monthly) and your payment is $1,498.88. What interest rate are you actually paying?

Enter Amount=250,000, Loan Date=01/01/2024, 1st Pmt Date=02/01/2024, Periods=360, Pmts/Yr=12, Pmt Amount=1,498.88. Leave Rate blank.

Per%Sense back-solves Rate = 6.0000% by Newton iteration on the schedule residual — the rate that makes this payment stream amortize the loan exactly. This is the Amortization-screen counterpart of an IRR question, and the inverse of Examples 1d and 1e.

Solving for the rate needs Amount, Pmt Amount, Pmts/Yr, and the term. The term may be given either as # Periods or as a Last Pmt Date — when only the Last Pmt Date is supplied, Per%Sense derives the period count first (the Example 1c derivation), then solves the rate.

Example 1g: Deriving the Term from a Known Payment (Solve # Periods)
You took out a $200,000 loan at 6% with monthly payments of $1,199.10, but you no longer remember how long the loan runs. How many payments is it?

Enter Amount=200,000, Loan Date=01/01/2025, Rate=6.0000, Pmts/Yr=12, Pmt Amount=1,199.10. Leave both # Periods and Last Pmt Date blank.

Per%Sense fills in # Periods = 360 (a 30-year loan) and the matching Last Pmt Date. It uses a closed-form formula — given the amount, rate and payment, the number of installments follows directly — so this is instant, no iteration.

If the payment is too small to cover even the first month's interest, the loan can never amortize; Per%Sense reports that rather than running forever. This is the plain-loan case — deriving the term while Advanced Options are in use is not supported (supply # Periods or a Last Pmt Date there).

Example 2: Computing APR with Points
Same loan as Example 1, but with 2 points. What is the APR?

Enter Amount=100,000, Loan Date=02/12/2024, Rate=8.0000, 1st Pmt Date=03/01/2024, Periods=360, Pmts/Yr=12, Points=2.0000.

Per%Sense fills in the APR field. The points are an upfront cost: the borrower effectively receives only $98,000 (loan amount minus the $2,000 in points) but still repays the full 360-payment schedule, so the true annual cost of the borrowing — the APR — comes out above the 8% note rate. The APR is the rate at which the present value of all the scheduled payments equals that net $98,000 (the same idea as Present Value Example 5).

Enter Points=0 and the APR field simply reports the note rate expressed as a yield — a useful baseline to compare against.

Example 3: Weekly Payments
$100,000 at 8%, weekly payments, 30 years (1,560 payments). Settings: 365-day basis.

Enter Amount=100,000, Loan Date=01/01/2024, Rate=8.0000, Pmts/Yr=52, Periods=1560, Basis=365. (Leave 1st Pmt Date and Payment blank — 1st Pmt Date defaults to one week after Loan Date; Payment is computed.)

Per%Sense computes Weekly payment ≈ $168.79. Switching to the 365-day basis matters here: under 360 the per-period rate uses a 30/360 day count, which subtly shifts the answer for sub-monthly frequencies.

Example 4: Accelerating with More Frequent Payments
Compare monthly vs. biweekly payments on a $100,000, 8%, 30-year loan.

Both runs share: Amount=100,000, Loan Date=01/01/2024, Rate=8.0000. Leave 1st Pmt Date and Payment blank. Enter Basis=360 — but note that Per%Sense automatically switches biweekly and weekly loans to a 365-day basis (with a notice), so the biweekly figures below are reported on that basis.

Monthly run: Pmts/Yr=12, Periods=360. Payment ≈ $733.76. Total interest over 30 years ≈ $164,155.

Biweekly run: Pmts/Yr=26, Periods=780 (30 years × 26 biweekly periods). Per%Sense computes a biweekly Payment of ≈ $337.81 (the final payment trims to about $319.57), for total interest ≈ $163,474.

The per-payment amount drops to a little under half the monthly payment, and the total interest is only slightly lower — about $680 over the 30 years. The small saving comes from finer compounding, not from paying the loan off faster: this run still spans the full 30 years, because the payment is solved to amortize over exactly 780 periods. The large savings often quoted for biweekly mortgages come from a different strategy — paying half the monthly payment ($366.88) every two weeks. That sneaks in the equivalent of a 13th monthly payment each year and retires the loan several years early; to model it, enter the half-payment as the Payment and leave Periods blank so the term is solved.

Example 5: Interest-Only Loan with Balloon
$100,000 at 8%, monthly interest-only payments, terminated with a 5-year balloon.

Enter Amount=100,000, Loan Date=01/01/2024, Rate=8.0000, 1st Pmt Date=02/01/2024, Pmts/Yr=12, Periods=60, Pmt Amount=666.67 (= $100,000 × 8% / 12). Then expand Advanced Options and under Balloons add a row with Date=01/01/2029 and Amount=100,000.

The fixed Payment of $666.67 covers exactly the monthly interest, so no principal is reduced — each schedule row shows $666.67 interest and $0 principal, and the balance stays at $100,000 for all 60 months. The balloon at month 60 then settles the full principal.

Examples 6-18: Advanced Features (Summary)
#TitleFeature demonstratedStatus
6Adjustable Rate LoanRate changes on specific datesImplemented — an adjustment that gives only a new rate now re-solves the payment over the remaining term (see Advanced Solver Examples below)
7Including Balloon PaymentsScheduled lump sum paymentsImplemented
8Balloon UnknownComputing the balloon amount neededImplemented — leave a balloon row's Amount blank to solve the "target balloon" (see Advanced Solver Examples below)
9Calculating the Completion DateLeave # Periods blank, supply Last Pmt DateImplemented — both the dates-to-periods case (Example 1c) and the solve-term-from-payment case (Example 1g)
10Negative AmortizationPayment less than interestImplemented (engine tracks principal increasing each period)
11Neg Amort: Fixed Low RateInitial low payment, rising balanceImplemented
1230-Year Terminated at 12Balloon terminates earlyImplemented
13Principal MoratoriumInterest-only start periodImplemented
14Targeted Principal ReductionMinimum principal per paymentImplemented (with input validation: target must not exceed Amount ÷ # Periods)
15Interest Plus PrincipalFixed principal + variable interestImplemented via Target option
1613 Annual PaymentsExtra payment each year to accelerateImplemented via Prepayments
17Skipping a Regular PaymentSkip Months or balloon of $0 with "includes regular = YES"Implemented
18Computing the Loan RateLeave Rate blank, fill in PaymentImplemented — worked through in Example 1f above (Newton iteration on the schedule residual)

All of these features are wired up in the API and engine and can be exercised by entering the inputs on the Amortization screen and clicking Calculate. The advanced field-presence solvers — where you leave a field blank for the engine to compute — are worked through in the examples that follow.

Advanced Solver Example A: Target Balloon (Solve the Balloon Amount)
You want a 5-year loan on $200,000 at 6%, but you'd like to keep the monthly payment at the 30-year level of $1,199.10 and settle the rest with a balloon. What balloon clears the loan at year 5?

Enter Amount=200,000, Loan Date=01/01/2025, Rate=6.0000, 1st Pmt Date=02/01/2025, # Periods=60, Pmts/Yr=12, Pmt Amount=1,199.10. Expand Advanced Options, and under Balloon Payments add a row with Date=01/01/2030 and Amount left blank.

A balloon row with a date but no amount is a target balloon: Per%Sense solves the amount that drives the loan balance to exactly zero. Here it computes a balloon of roughly $186,000 — the principal still outstanding after five years of the smaller 30-year payment.

Use this whenever you know when the loan must be retired but not the lump sum it takes.

Advanced Solver Example B: ARM Rate Change with No New Payment
A $200,000, 30-year, 6% loan has a rate adjustment to 9% after five years. You know the new rate but not the new payment — what should it become?

Enter the base loan (Amount=200,000, Rate=6.0000, 1st Pmt Date=02/01/2024, # Periods=360, Pmts/Yr=12; leave Pmt Amount blank so the engine computes the starting payment). Expand Advanced Options, and under Rate/Payment Adjustments add a row with Date=01/01/2029, new Rate=9.0000, and Amount left blank.

When an adjustment supplies a new rate but no new payment, Per%Sense re-amortizes the remaining balance at the new rate over the periods that are left — the payment steps up so the loan still finishes on schedule. Without this, the old payment would no longer amortize the loan and a residual balance would be left at the end.

(The reverse — a new payment with no new rate — now solves the implied rate: Per%Sense finds the rate at which the new payment amortizes the remaining balance over the remaining term, so the loan still finishes on schedule. It is the exact mirror of the rate-only case, not a recast at the old rate.)

Advanced Solver Example C: Unknown Prepayment Amount
You have a five-year loan that doesn't fully amortize at its regular payment. How large must a monthly extra payment be to retire it on time?

Enter the loan (for example Amount=200,000, Rate=6.0000, # Periods=60, Pmts/Yr=12, Pmt Amount=1,199.10 — the 30-year payment, which leaves a large balance at year 5). Expand Advanced Options, and under Additional Periodic Payments add a series with a Start Date, Pmts/Yr=12, a Stop Date (or a Number of Payments), and Amount left blank.

Per%Sense solves the per-payment extra amount that drives the balance to zero by the end of the schedule. The series must be bounded — give either a Stop Date or a Number of Payments — so the count of extra payments is known.

Advanced Solver Example D: Unknown Prepayment Duration
You can afford an extra $500 every month on a $200,000, 30-year, 6% loan. How soon does that pay the loan off?

Enter the base loan, then under Additional Periodic Payments add a series with a Start Date, Pmts/Yr=12, Amount=500, and both the Stop Date and the Number of Payments left blank.

With the amount known but no bound on the series, Per%Sense solves the duration: it runs the extra payments until the loan retires and reports how many were needed. A $500/month prepayment retires the 30-year loan in roughly 15 years instead of 30 — the schedule simply ends early, and an advisory notes the payment number at which the loan was retired.

Advanced Solver Example E: Prepayment — Added vs. Replacing the Regular Payment
On a $200,000, 30-year, 6% loan ($1,199.10/month), you enter an extra $500/month for the first year under Additional Periodic Payments. Does that $500 get added to the regular payment, or paid instead of it? The "Balloon / prepayment includes regular pmt" setting decides — and it changes the result dramatically.

NO (the default) — added on top. Each of the first twelve payments becomes $1,199.10 + $500 = $1,699.10. The extra principal accelerates the loan: it now retires in 333 payments instead of 360, and total interest falls to about $204,936 (from ~$231,700 with no extra). This is the usual "pay a little extra each month" case.

YES — replaces the regular payment. The same $500 is now the whole payment for those twelve months — you pay $500 instead of $1,199.10. That is far below the ~$1,000 of interest due, so the balance grows during the first year (negative amortization); the loan runs the full 360 payments and total interest rises to about $272,208. Per%Sense adds a Note that the payment is below the interest due.

The lesson: the same "$500" can either accelerate the loan or stall it, depending purely on this one setting. If you mean "extra," leave the setting at NO; switch it to YES only when you are deliberately substituting a different payment amount for a stretch of the schedule.

Advanced Solver Example F: ARM Payment Change — Solve the Implied Rate
The mirror image of Example B. You know what the new payment will be after an adjustment, but not the rate it implies. On the $200,000, 30-year, 6% loan, the payment changes to $1,500/month five years in. What rate does that imply, and does the loan still finish on time?

Enter the base loan (Amount=200,000, Rate=6.0000, 1st Pmt Date=02/01/2024, # Periods=360, Pmts/Yr=12; leave Pmt Amount blank to compute the $1,199.10 start payment). Under Rate/Payment Adjustments add a row with Date=01/01/2029, Rate left blank, and Amount=1,500.

When an adjustment supplies a new payment but no new rate, Per%Sense solves the implied rate — the rate at which $1,500 amortizes the balance remaining at year 5 over the remaining term. Because $1,500 is above the $1,199.10 that 6% would require, the implied rate steps up from 6%, and the loan still retires exactly on its original 360-month schedule.

Watch for a too-low payment. If instead you set the new payment below what the remaining balance needs — say $400/month, less even than the interest due — the only rate that still retires the loan on schedule is negative. Per%Sense computes and runs that negative rate (matching the original DOS engine), so you'll see negative interest from the adjustment date and a balance that barely moves. It flags this with a Note: "a payment-only adjustment set a new payment too low to amortize the loan at a positive rate…" — the signal to raise the new payment if a positive rate was intended.

Advanced Solver Example G: How Much Do Extra Payments Save?
You have a $200,000, 30-year loan at 6% (monthly), with a regular payment of $1,199.10. If you pay an extra $200 every month, how much interest do you save, and how much sooner is the loan paid off?

First generate the baseline: Amount=200,000, Loan Date=01/01/2024, 1st Pmt Date=02/01/2024, Rate=6.0000, Pmts/Yr=12, # Periods=360, Payment blank. Per%Sense computes the $1,199.10 payment and a schedule that runs the full 360 payments (to 01/01/2054) with $231,676.38 of total interest.

Now add the extra payment under Additional Periodic Payments: Start Date=02/01/2024, Per/Yr=12, Amount=200, Stop Date=01/01/2054 (any date past the original maturity — the loan will retire before then). Leave the includes-regular-payment setting at its default (NO) so the $200 is paid on top of the regular payment.

The loan now pays off in 252 payments — 01/01/2045, nine years early — with total interest of $151,875.87. Paying an extra $200/month saves $79,800.51 in interest and retires the loan 108 payments (9 years) sooner.

This is the prepayment engine at work. If you instead leave the regular Payment blank and omit the Stop Date, Per%Sense reads the open-ended prepayment as a question — "how long must the extra payments run?" — and solves the duration instead (Advanced Solver Example D).

Advanced Solver Example H: Rule of 78s and Early Payoff
On a $12,000, 36-month loan at 12% (monthly), how does turning on Rule of 78s change the schedule — and what does it cost you if you pay the loan off after one year?

Enter the loan: Amount=12,000, Loan Date=01/01/2024, 1st Pmt Date=02/01/2024, Rate=12.0000, Pmts/Yr=12, # Periods=36, Payment blank. Calculate it once with Rule of 78s off, then again with it on (open Settings and set Rule of 78s = YES; it is available only for basic loans with no Advanced Options).

The payment is identical either way — $398.57 — and if you hold the loan to term, so is the total interest, $2,348.58. Rule of 78s does not change what you pay; it changes how each payment is split between interest and principal:

Standard Rule of 78s First payment interest $120.00 $126.95 Balance after 12 pmts $8,467.01 $8,507.80
Rule of 78s front-loads the interest, so more of your early payments go to interest and less to principal. If you pay the loan off after 12 months, you still owe $8,507.80 under Rule of 78s versus $8,467.01 on a standard schedule — $40.79 more. The gap is wider on larger or longer loans, which is why Rule of 78s favors the lender when a borrower repays early.

6. Present Value Screen

Overview

The Present Value screen is a very flexible tool for working with the time value of money. Applications include financial planning, structured legal settlements, valuation of legal claims, annuities, pensions, and internal rates of return (IRR).

As with all Per%Sense screens, flexibility comes from choosing which cells to fill in:

Present or Future Value: the Concept

The promise of one dollar next year has a certain value today — certainly less than one dollar. If you trust the promise, the present value is the amount you'd need to invest today for it to grow to one dollar by next year.

Conversely, a dollar received in the past has a value of more than one dollar today: its present value is the amount it would have grown into, had it been invested with compound interest.

You can think of present value as a loan: How big a loan can I take out today if I want to pay it back with this cash flow? Or as a bank account: How big must my balance be to make these withdrawals, emptying the account with the last withdrawal?

Future value is simply the bank balance on a future date after scheduled deposits. To adjust present dollars for inflation, put the inflation rate in the Rate field and set the as-of date in the future.

Payment Grids

Single Payments (Lump Sums)

ColumnDescription
DateDate of the one-time payment. Leave blank to back-solve from Amount + Value (PV-2).
AmountDollar amount of the payment. Leave blank to back-solve from Date + Value (PV-1).
ValuePresent/future value at the as-of date. Per%Sense computes it from Date + Amount; or, on a row-level back-solve, type a target Value and leave Date or Amount blank to have the engine solve the missing field.

Multiple rows can be entered. Each payment is valued independently. Field-presence dispatch: exactly two of the three columns ({Date, Amount, Value}) must be filled — whichever one is blank is the field Per%Sense solves for.

Periodic Payments

ColumnDescription
From DateDate of the first payment in the series. Leave blank to back-solve from To Date + Amount + Value (PV-6).
ThroughDate of the last payment in the series. Leave blank to back-solve from From Date + Amount + Value (PV-5).
Per/YrPayment frequency (12=monthly, 52=weekly, etc.).
AmountDollar amount of each payment. Leave blank to back-solve from From + Through + Value (PV-4).
COLA %Annual cost-of-living adjustment (optional). Payments increase by this percentage each year.
ValuePresent/future value of the entire series. Per%Sense computes it from From + Through + Amount; or type a target Value and leave exactly one of those three blank to back-solve it.

Field-presence dispatch: exactly three of the four columns ({From, Through, Amount, Value}) must be filled — whichever one is blank is the field Per%Sense solves for. Pmts/Yr is always required.

True Rate, Loan Rate, and Yield

Interest rates are quoted differently for loans than for savings. An eight-percent savings account pays slightly more than an eight-percent loan because of compounding within each period.

Rate TypeUse forDescription
True RatePresent value, savingsContinuously compounded rate. The mathematically "pure" rate.
Loan RateLoans, mortgagesDiscretely compounded rate (depends on payments per year).
YieldSavings, bondsActual interest earned on one dollar during one year, after compounding.

These are equivalent representations of the same quantity — like pounds and kilograms:

True Rate 8.0% = Monthly Loan Rate 8.0267% = Yield 8.3287%

The Rate Type dropdown selects which format you're entering. Bond yields are loan rates for semi-annual compounding.

COLAs (Cost of Living Adjustments)

Annuities, pensions, and structured settlements often provide for increases tied to the cost of living. Use the COLA column for present value computations involving rising (or falling) payments.

COLA values are interpreted as yields (not compounding rates), following convention. A blank COLA column is the same as 0%.

The COLA escalation month setting controls when the adjustment is applied: on the anniversary of the first payment, in a specific month, or continuously with each payment.

IRR (Internal Rate of Return)

IRR is the number you want to know when you ask "How well did my investment do?" It is the true measure of investment performance over time.

IRR is computed on the Present Value screen by entering payments and their value, then leaving the Rate blank. Per%Sense solves for the rate that makes the present value equal the stated amount.

Why not a separate IRR screen? Because the calculations are the same. "What rate makes the present value of these payments equal $100,000?" is precisely an IRR calculation. Conversely, "How much should I bid for this instrument to achieve a 10% IRR?" is a present value calculation.

Variable Rate Mode

The regular Present Value screen uses a single interest rate. The Variable Rate Schedule section (expand it under the grids) allows different rates for different time periods.

Common uses:

How to use it

Fill in the rate-schedule grid under the Lump Sum and Periodic blocks. Row 1's date cell is fixed (it says "—") because Row 1 is the starting rate — the rate in effect at the beginning of your computation. Rows 2 and 3 each name a date on which a new rate kicks in. Within each row, you can enter the rate as True Rate, Loan Rate, or Yield (use any one column — True Rate takes precedence if you fill more than one). Loan Rate is converted to True Rate assuming monthly compounding.

As soon as any row in the schedule is populated, Per%Sense switches into variable-rate mode for the entire screen: the As-of Rate field above is ignored, and every cash flow is discounted through the schedule.

Worked example

IRS tax interest scenario: $100,000 owed on 01/01/2024, paid 3 years later on 01/01/2027, with rates of 5% in 2024, 7% in 2025, and 10% in 2026.

  1. As-of Date = 01/01/2024.
  2. One lump sum: Date = 01/01/2027, Amount = 100,000.
  3. Rate schedule — Row 1 (starting rate): True Rate = 5.0000. Row 2: Date = 01/01/2025, True Rate = 7.0000. Row 3: Date = 01/01/2026, True Rate = 10.0000.

Per%Sense computes Sum Value ≈ $80,251.88. (Cross-check: the integral of the rate over the 3-year span is 0.05 + 0.07 + 0.10 = 0.22, so PV = $100,000 × e−0.22.)

Back-solving the amount

Variable Rate Example: Solving the Original Liability
Take the IRS-interest scenario above. Suppose you know the discounted value today is $80,251.88 but not the original liability that was owed on 01/01/2027. What principal does that present value imply?
Keep the same rate schedule (Row 1 True Rate = 5.0000; Row 2 = 01/01/2025, 7.0000; Row 3 = 01/01/2026, 10.0000). As-of Date = 01/01/2024. Add one lump sum with Date = 01/01/2027, leave Amount blank, and type 80,251.88 into the Present Value field.

Per%Sense back-solves Amount = $100,000.00 — it divides the target value by the schedule's discount factor (the inverse of the forward run). This is the one back-solve variable-rate mode supports: a single blank amount. A blank rate or date is rejected, because the schedule fixes the rates and the payment dates are given.

Limitations

Combining with life contingency

The variable-rate path also supports actuarial weighting: set a Life dropdown on any row and provide a life table + DOB in the Life Contingency section as usual. Each payment is then discounted through the rate schedule and weighted by the survival probability at the payment date. POD (Payment on Death) value is likewise integrated through the schedule rather than a single rate.

The complementarity property still holds: under the same VR schedule, Living-PV + Dead-PV = non-contingent-PV. This combination existed in DOS Per%Sense Pro (compiled with both PVLX and ACTU flags); the Windows port shipped without ACTU and lost it. The web port restores it.

Per-Row Validation

Per%Sense rejects payment-row combinations that can't be solved mathematically:

ErrorTrigger
"specify either date or amount in single payments, line N"Lump-sum row has only a Value filled in (no Date, no Amount — can't tell which to solve for)
"amount cannot be zero on a single payment row, line N"A lump-sum row supplies Amount = 0 with the other fields blank (the back-solver would divide by zero)
"value cannot be zero on a single payment row, line N"Same with Value = 0
"specify either other date or amount in periodic payments, line N"Periodic row has only one date supplied (no amount, no other date)
"dates are out of order, line N"Periodic row's From Date is on or after the Through date
"too many unknowns"The screen has both a fully-specified row AND a row with an unknown to solve — choose one mode
"insufficient data on screen"Not enough information to compute or back-solve anything

These checks fire during the FirstPass step, before any solver runs. If the screen passes validation, the appropriate forward or backward calculation is dispatched automatically based on which fields you left blank.

Over-specified rows are a warning, not an error

Supplying more than a row needs is not rejected. If a lump-sum row carries all three of Date, Amount, and Value — or a periodic row carries both dates plus Amount and Value — Per%Sense does not stop. It treats the extra Value as redundant, recomputes it from the other fields, and returns a non-fatal warning alongside the normal result (for example, "single payment row 1 is over-specified — the supplied Value is redundant and will be recomputed"). This mirrors DOS Per%Sense, which surfaced the situation as a cancelable "value already determined by data above" prompt rather than a hard error.

Present Value Examples

Example 1: Lump Sum Present Value
What is the present value of a promise to pay $10,000 on 1/1/2025, if today is 1/1/2024 and the discount rate is 8%?

Set Rate Type = True Rate (the convention these examples use), then enter As-of Date=01/01/2024, Rate=8.0000, and one lump sum: Date=01/01/2025, Amount=10,000.

Present Value = $9,231.16. The $10,000 a year out is worth $9,231.16 today at 8% True Rate — continuous compounding, $10,000 × e−0.08.

The Rate Type matters here. If Rate Type is left on Loan Rate, the same "8" is read as a monthly-compounded loan rate and the answer is $9,233.61 ($10,000 ÷ (1 + 0.08/12)12) — about $2.45 higher. Both are exact to the penny; they are just two ways of quoting the same 8%. Pick the Rate Type that matches the figure you're checking.

Example 2: Monthly Annuity
What is the present value, as of 01/01/2024, of $1,000 per month for 10 years (through 01/01/2034) at 6%?

Enter As-of Date=01/01/2024, Rate=6.0000, and a periodic payment: From=01/01/2024, Through=01/01/2034, Per/Yr=12, Amount=1,000.

The present value represents how much money you'd need on the as-of date, invested at 6%, to fund all 120 payments.

Example 3: Present Value of a 20-Year Savings Plan
You plan to set aside $500 a month for 20 years. At a 7% discount rate, what is the present value of those deposits today?

Enter As-of Date=01/01/2024, Rate=7.0000. Add one periodic payment: From=01/01/2024, Through=01/01/2044, Per/Yr=12, Amount=500.

Per%Sense computes Sum Value ≈ $64,889. This is the lump sum you'd need today to fund 240 monthly $500 outflows at 7% — equivalent, in present-value terms, to making the deposits yourself.

To get the corresponding future value at 2044 (the bank balance after 20 years of contributions), multiply by the 20-year growth factor: $64,889 × (1 + 0.07/12)240 ≈ $260,463. Per%Sense's PV engine values cash flows as of a single reference date; future-value framings are derived from the PV by the user.

Example 4: Annuity with COLA
A pension pays $2,000/month with a 3% annual cost-of-living adjustment. What is its present value at a 5% discount rate?

Enter As-of Date=01/01/2024, Rate=5.0000. Add a periodic payment: From=01/01/2024, Through=01/01/2054 (30-year horizon, adjust to taste), Per/Yr=12, Amount=2,000, COLA=3.0000. The computed Sum Value is substantially higher than the same annuity with COLA=0, because each year's payments are 3% larger than the prior year's.

Example 4b: How COLA Escalation Timing Changes the Value
A pension pays $2,000/month from 01/01/2024 through 01/01/2054 with a 3% annual COLA, discounted at 5%. How much does the timing of the COLA step change its present value?
Enter once: As-of Date = 01/01/2024, Rate = 5.0000; periodic From = 01/01/2024, Through = 01/01/2054, Per/Yr = 12, Amount = 2,000, COLA = 3.0000. Then re-run while changing Settings → COLA Escalation Month.
Escalation modeSum Value
Anniversary (default) — steps once a year on the payment anniversary$532,551.46
Continuous — spreads the 3% smoothly across each payment$539,754.26
Specific month (e.g. July) — steps every year in that month$540,423.84

All three apply the same 3% raise; they differ only in when the raise lands, which shifts a few thousand dollars of present value. Anniversary is the convention for most pensions and structured settlements; continuous and month-specific match plans whose raises are defined differently. Pick the mode that matches the document you're valuing.

Example 5: APR as a Present Value Problem
How is APR actually computed?

An APR is really an IRR in disguise. Consider a loan of $100,000 at 8% with 2 points and monthly payments of $733.76 for 30 years. The borrower actually receives $100,000 - $2,000 (points) = $98,000.

The APR is the rate that makes the present value of 360 monthly payments of $733.76 equal to exactly $98,000. In other words, the APR is the IRR of a $98,000 investment that returns $733.76 per month for 30 years.

Example 5b: Solving for the Rate (IRR) from the Screen
You can buy an instrument for $9,000 today that pays $10,000 in ten years. What rate of return is that?

Enter the As-of Date, add a lump sum (Date ten years out, Amount=10,000), and type the price 9,000 into the Present Value field. Leave the Rate blank.

Per%Sense solves the rate that makes the present value of the payments equal your target — the IRR. The Present Value field doubles as a target box: type a value there and leave Rate blank to solve the rate, and the solved rate appears back in the Rate cell.

The rate is reported in whichever form the Rate Type dropdown is set to (True / Loan / Yield). IRR cannot be solved in Variable Rate mode — a rate schedule fixes the rates, so there is nothing to solve.

Example 5c: Solving for the As-of Date
A future payment is worth a known amount at some discount rate — as of what date is it worth that?

Enter the Rate, add the payment row(s), and type the known value into the Present Value field. Leave the As-of Date blank.

Per%Sense solves the as-of date at which the payments discount to that value and fills it into the As-of Date cell. Exactly one of Rate and As-of Date may be left blank — leaving both blank is ambiguous, and the screen says so.

Example 5d: Solving the Payment Amount (PV-4)
You have $91,012 set aside today, earning 6%. What level monthly payment can it fund for ten years (01/01/2024 through 01/01/2034)?
Enter: As-of Date = 01/01/2024, Rate = 6.0000. Add a periodic payment: From = 01/01/2024, Through = 01/01/2034, Per/Yr = 12, leave Amount blank, and type 91,012.27 into the Present Value field.

Per%Sense back-solves Amount = $1,000.00 per month — the payment whose 120-month present value equals your $91,012. This is the same fill-in-the-blank dispatch as the lump-sum solves, applied to a periodic series: supply From, Through, and a target Value, and the engine returns the Amount. (Leave Through blank instead, and it solves the end date — PV-5.)

Example 5e: Solving the Start Date of a COLA Annuity (PV-6)
A $1,000/month annuity with a 3% annual COLA runs through 01/01/2030 and is worth $65,844 today at 6%. When does the series start?
Enter: As-of Date = 01/01/2024, Rate = 6.0000. Add a periodic payment: Through = 01/01/2030, Per/Yr = 12, Amount = 1,000, COLA = 3.0000, leave From blank, and type 65,844.49 into the Present Value field.

Per%Sense solves From ≈ 01/01/2024. With a non-zero COLA the date solver needs an extra approximation step to converge (the escalating payments make the value-vs-date curve steeper); that step was added so this case lands correctly. As with the other iterative date solves, the answer settles within a few days of the exact date — close enough to read off the start month.

Example 5f: Variable Rate Schedule (IRS Underpayment Interest)
A $100,000 liability is owed today (01/01/2024) but won't be settled until three years out (01/01/2027). The discount rate changes each year, IRS-style: 5% in 2024, 7% in 2025, 10% in 2026. What is it worth today?
Enter: As-of Date = 01/01/2024. Add one lump sum: Date = 01/01/2027, Amount = 100,000. Then expand Variable Rate Schedule (below the payment grids) and fill in: Row 1 (starting rate) True Rate = 5.0000; Row 2 Date = 01/01/2025, True Rate = 7.0000; Row 3 Date = 01/01/2026, True Rate = 10.0000.

Per%Sense computes Sum Value ≈ $80,251.88. (Cross-check: the rate integrated over the three years is 0.05 + 0.07 + 0.10 = 0.22, so the value is $100,000 × e−0.22.) As soon as any schedule rate is filled, the screen switches to variable-rate mode — the single As-of Rate above is ignored and every cash flow is discounted through the schedule. The "Included in total" line shows variable-rate schedule active so the mode is never a surprise.

Back-solving: leave the lump's Amount blank and type 80,251.88 into the Present Value field, and Per%Sense recovers Amount = $100,000. Amount is the only field variable-rate mode can solve — a rate or a date cannot be the target of the computation.

Within each schedule row you may enter the rate as True Rate, Loan Rate, or Yield (any one column); True Rate takes precedence if more than one is filled. To clear a variable-rate setup, use Clear — it empties the rate schedule and the Life Contingency section along with the payment rows.

Example 5g: Future Value — Adjusting for Inflation
Prices rise about 3% a year. How much will you need 20 years from now to match the buying power of $50,000 today?

Put the as-of date in the future to turn a present value into a future value. Set As-of Date = 01/01/2044, Rate Type = True Rate, Rate = 3.0000. Add one lump sum: Date = 01/01/2024, Amount = 50,000, and leave Value blank.

Per%Sense reports Sum Value = $91,105.94. Because the as-of date is later than the payment, the $50,000 is carried forward with compound growth rather than discounted back. (Cross-check: $50,000 × e0.03×20 = $50,000 × e0.6.)

The same setup answers the savings question in reverse: leave the Amount blank and type a target into the Present Value field to find the deposit today that grows to a chosen future sum.

Example 5h: Comparing Two Investments (IRR)
You can invest $9,000 today two ways. Investment A returns a single $15,000 eight years from now. Investment B returns $110 a month for those eight years. Which earns the better rate of return?

Each option is an IRR question: leave the Rate blank and type the price you pay ($9,000) into the Present Value field, so Per%Sense solves the rate that makes the payments worth exactly $9,000 today.

Investment A. As-of Date = 01/01/2024, Present Value = 9,000, Rate blank. One lump sum: Date = 01/01/2032, Amount = 15,000.

Investment B. Same As-of Date and Present Value = 9,000, Rate blank. One periodic row: From = 02/01/2024, Through = 01/01/2032, Per/Yr = 12, Amount = 110.

Investment A solves to a True Rate of 6.39%; Investment B to 4.06%. Even though B pays out $10,560 in total versus A's $15,000, A's return is far better because all of A's money arrives at once at the end while B's dribbles in and is each discounted only a little. Choose Investment A.

Switch the Rate Type to Yield or Loan Rate to read the same IRR in whichever convention you prefer — they are equivalent representations of one rate.

Example 5i: Lease vs. Purchase
A car leases for $400/month for three years. Or you can buy it for $28,000 and sell it for an estimated $15,000 at the end of three years. At a 5% discount rate, which is cheaper in today's dollars?

Value the cost of each plan as of today and compare. Use As-of Date = 01/01/2024, Rate Type = True Rate, Rate = 5.0000 for both.

Lease. One periodic row: From = 02/01/2024, Through = 01/01/2027, Per/Yr = 12, Amount = 400. Per%Sense values the stream at $13,344.20 — the present-value cost of leasing.

Purchase. Clear the screen, then enter two lump sums: the $28,000 you pay now (Date = 01/01/2024, Amount = 28,000) and the resale you receive back, entered as a negative amount (Date = 01/01/2027, Amount = −15,000). The negative figure nets the money coming back against the money going out.

Buying nets to $15,089.38 in present-value cost, versus $13,344.20 to lease — so under these assumptions leasing is about $1,745 cheaper in today's dollars. Raise the resale estimate or lower the discount rate and the balance can tip the other way; the point is that Per%Sense puts both plans on the same footing.

Examples 6-22: Advanced Present Value (Summary)
#Topic
6Multiple lump sums at different dates
7Mixed lump sums and periodic payments
8Backward calculation: find the payment amount
9Backward calculation: find the date
10IRR of a bond (bond yield to maturity)
11Variable rate: IRS underpayment interest
12Variable rate: legal prejudgment interest
13Simple interest for legal damages
14COLA with anniversary escalation
15COLA with continuous escalation
16Comparing two investment options — worked above as Example 5h
17Lease vs. purchase analysis — worked above as Example 5i
18-20Variable rate computations
21Simple vs. compound interest comparison
22Forward and backward calculations combined

7. Life Contingency (Actuarial)

Overview

The Life Contingency feature integrates actuarial (mortality) tables with present value calculations. This allows you to compute the present value of payments that are contingent on a person being alive or deceased at the payment date.

This feature was present in the original DOS version of Per%Sense but was never ported to the Windows version. It is essential for:

How It Works

Each lump sum or periodic payment on the Present Value screen has a Life dropdown with seven contingency types. Each one models a real-world product or claim. When a contingency is set, each payment's present value is multiplied by the survival probability — the probability that the contingency condition is met at the payment date, derived from the life table and date of birth.

CodeNameTriggerWhat it models
NNonePayment always made; no mortality weighting (default).Fixed-term annuity, bond, mortgage. The straightforward case — mortality is irrelevant.
LLivingPaid only if person 1 is alive at the payment date.Lifetime pension, life annuity, lost-wages claim, retiree healthcare benefits. Most common contingency.
DDeadPaid only if person 1 is deceased at the payment date.Reverse-mortgage payouts to heirs after death; "if my benefactor predeceases me, I receive X"; certain estate or trust distributions; survivor's-benefit-only structures. Not "no contingency" — that's N.
1Only 1 LivingPerson 1 is alive AND person 2 is deceased.Spouse's survivor pension that only pays while the spouse is alive after the primary worker has died. Less common but appears in some defined-benefit plans.
2Only 2 LivingPerson 2 is alive AND person 1 is deceased.Mirror of 1. Pick whichever assignment matches who you put in Person 1 vs Person 2.
EEither LivingAt least one of the two people is alive.Joint-and-survivor annuity at the full amount (pays as long as anyone is alive). Common in pension plans — the benefit continues to the surviving spouse.
BBoth LivingBoth people are alive.Joint-life annuity that stops at first death. Rare standalone, but a useful building block: a typical "100% joint-and-survivor" pension equals B at one rate plus the post-first-death tail at another.

For two-life contingencies (codes 1, 2, E, B), survival probabilities combine using the independence assumption — this is a simplification, since spouses' mortality is somewhat correlated in practice, but it's the standard convention for pension and structured-settlement work.

What each contingency requires (and how the screen enforces it)

A contingency is only meaningful when the people it refers to are actually set up, so the Present Value screen guides you:

Why "Dead" isn't "without contingency"

The most common point of confusion: people read "Dead" and assume it means "ignore mortality." It doesn't — that's None. Dead means the payment requires the person to be deceased by the payment date, which is the survivability complement of Living. The two satisfy a clean identity:

PV(Living) + PV(Dead) = PV(None)

The Lifetime Pension example below makes this concrete: $253,135 (Living) + $144,628 (Dead) = $397,763 (None), to the dollar. If you set Dead expecting "non-contingent" you'll get the complementary value, not the unconditional one.

Setting Up Life Tables

Expand the Life Contingency (Actuarial) section on the Present Value screen. You'll see:

  1. Person 1 — Select a life table (Per%Sense 1988 Male/Female, SSA 2021 Male/Female, or custom) and enter the date of birth.
  2. Person 2 (optional) — Required only for two-life contingencies (Only 1, Only 2, Either, Both).
  3. Reference Date — The "now" date. Survival probabilities are conditional on being alive at this date.
  4. Payment on Death (POD) — Optional lump sum payable at the moment of death. Its expected present value is computed automatically.

Built-in Life Tables

Per%Sense includes two sets of built-in tables. The SSA 2021 Period Life Table from the U.S. Social Security Administration is the default, with separate male and female tables — the standard modern basis for pension and legal calculations in the United States. The Per%Sense 1988 male and female tables are also available: they are the original mortality basis the program shipped with (U.S. Dept. of HHS, 1988), for reproducing the original program's results.

Custom Life Tables

Select "Custom (paste CSV)" and enter mortality data in the format: age,qx (one per line), where qx is the probability of dying within the year at that age. Example:

0,0.005 1,0.0004 2,0.0003 ... 99,0.35 100,1.0

The Mathematics

For a lump sum payment of amount A at date t, the life-contingent present value is:

Value = A × discount(t) × P(alive at t | alive now)

where P(alive at t) is computed from the life table as lx(age_at_t) / lx(age_now).

For periodic payments, each individual payment is computed separately (exact method) and weighted by its survival probability. This is slower than the formula method but necessary because survival probabilities are not constant.

For two-life contingencies, the probabilities combine using the independence assumption:

Key Property: Complementarity

For any payment, the Living and Dead contingent values sum to the non-contingent value. This is a useful sanity check: if a $100,000 payment at date T has a Living value of $65,000 and a Dead value of $35,000, the non-contingent value should be $100,000 (before discounting).

Example: Valuing a Lifetime Pension
A 65-year-old male, born 01/01/1959, receives a pension of $2,000/month for life. As of 01/01/2024 (his 65th birthday), what is the present value at a 5% discount rate?
  1. On the Present Value screen, enter As-of Date = 01/01/2024, Rate = 5.0000.
  2. Add a periodic payment: From = 01/01/2024, Through = 01/01/2059 (age 100 — 35 years after as-of), Per/Yr = 12, Amount = 2,000.
  3. Set the Life dropdown to Living.
  4. Expand Life Contingency. Select SSA 2021 Male, enter DOB = 01/01/1959, and Reference Date = 01/01/2024.
  5. Click Calculate.

Per%Sense computes Sum Value ≈ $253,135. Without the Living contingency the same 420-payment stream is worth ≈ $397,763, so the mortality weighting trims the pension's PV by about 36% — a 65-year-old won't collect every later payment.

Sanity check (complementarity): switching the Life dropdown to Dead on the same inputs yields ≈ $144,628, and $253,135 + $144,628 = $397,763 matches the non-contingent value to the dollar.

Example: Wrongful Death with Payment on Death
A 40-year-old male, born 01/01/1984, was providing $5,000/month to a household. As of 01/01/2024, the estate claims future lost support through retirement at age 67 (01/01/2051), plus a $50,000 burial cost payable at death. What is the present value at a 4% discount rate?
  1. Enter As-of Date = 01/01/2024, Rate = 4.0000.
  2. Add a periodic payment: From = 01/01/2024, Through = 01/01/2051 (age 67), Per/Yr = 12, Amount = 5,000, Life = Living.
  3. Expand Life Contingency. Select SSA 2021 Male, enter DOB = 01/01/1984, Reference Date = 01/01/2024, and POD = 50,000.
  4. Click Calculate.

Per%Sense computes Sum Value ≈ $959,540 for the survival-weighted lost-support stream, plus PODValue ≈ $12,617 for the expected present value of the $50,000 burial cost. The POD is much less than $50,000 because most of the probability mass for death falls many years out and is heavily discounted.

Example: Solving a Contingent Lump Sum's Face Amount
An insurer will pay a lump sum to a 65-year-old male (born 01/01/1959) on 01/01/2034, but only if he is then living. Its present value today, at a 5% discount rate, is $46,655.95. What is the face amount of the payment?
  1. On the Present Value screen, enter As-of Date = 01/01/2024, Rate = 5.0000.
  2. Add one lump sum: Date = 01/01/2034, set its Life dropdown to Living, and leave Amount blank. Type 46,655.95 into the Present Value field.
  3. Expand Life Contingency: select SSA 2021 Male, DOB = 01/01/1959, Reference Date = 01/01/2024.
  4. Click Calculate.

Per%Sense solves Amount = $100,000.00. Because the payment is contingent, the engine divides the discounted target by the survival probability (the chance a 65-year-old male is still alive at 75) before reporting the face amount — the inverse of the forward weighting in the Lifetime Pension example. Note: you can back-solve a contingent payment's amount, but not its date — "when is a life-contingent payment due" has no single answer, so Per%Sense reports that rather than guessing.

Example: Joint-and-Survivor Annuity (Two Lives)
A pension pays $3,000/month and continues as long as either spouse is alive. The husband was born 01/01/1959 (age 65) and the wife 01/01/1961 (age 63). At a 5% discount rate, what is this joint-and-survivor benefit worth today, as of 01/01/2024, over a 25-year horizon?
  1. On the Present Value screen set As-of Date = 01/01/2024, Rate Type = True Rate, Rate = 5.0000.
  2. Add one periodic row: From = 02/01/2024, Through = 01/01/2049, Per/Yr = 12, Amount = 3,000. Set its Life dropdown to "Either" (paid while at least one spouse lives).
  3. Expand Life Contingency. For Person 1 choose SSA 2021 Male, DOB = 01/01/1959. For Person 2 choose SSA 2021 Female, DOB = 01/01/1961. (The four two-life options — Only 1, Only 2, Either, Both — stay disabled until Person 2 is configured.) Reference Date = 01/01/2024.
  4. Click Calculate.
Per%Sense reports Sum Value = $466,438.47. Compare the same payments under different contingencies to see what survivorship is worth:
Life = None (term-certain) $512,647.05 Life = Either (survivor) $466,438.47 Life = Both (joint life) $328,148.78
A joint-and-survivor benefit (Either) is worth less than a guaranteed term-certain stream, because payments stop once both spouses have died. It is worth considerably more than a joint-life benefit (Both), which stops at the first death. The two-life probabilities combine under the independence assumption shown in The Mathematics above: Either = 1 − (1−P1)(1−P2), Both = P1 × P2.

8. Computational Settings

Click Settings in the header bar to open the Computational Settings panel. These settings affect how calculations are performed across worksheets. The Mortgage screen always uses 360-day and is not affected by most settings.

Year to Divide Century (obsolete)

Originally, Per%Sense accepted two-digit years (MM/DD/YY) and used this setting to decide whether "57" meant 1957 or 2057. That convention was practical in 1995 but causes silent misparses today — e.g. a Through-date of 5/15/57 on a 30-year horizon gets interpreted as 1957 instead of 2057, producing an "out of order" error or worse, a wrong answer that happens to validate. To remove this trap, every date field now requires a 4-digit year (MM/DD/YYYY). The setting is left in the panel for layout continuity but is disabled and has no effect on parsing.

Default Payments Per Year

By convention, loan rates and savings rates are quoted differently. The conversion between them depends on the number of payments per year. This setting resolves ambiguity when a rate appears without an explicit payments-per-year on the same row.

Options: 1, 2, 3, 4, 6, 12 (default), 24, 26, 52.

COLA Escalation Month

Controls when cost-of-living adjustments are applied to periodic payments:

Treatment of Interest on Interest

Applies only to negative amortization — when a payment is less than the accrued interest.

Basis Days Per Year

Combining Basis=365 with Exact Method=YES produces true 365-day calculations where each month's interest varies by actual number of days. This is mathematically correct but non-standard — the results look unfamiliar because interest and principal portions vary from month to month.

First Interest Prepaid at Settlement

When a loan closes mid-month with payments due on the 1st:

Only matters when time between loan date and first payment exceeds one period.

Interest Paid in Advance or Arrears

Stated Balloon Includes Regular Payment

If a $5,000 balloon is specified on a date when the regular payment is $1,000:

To model skipped payments: enter a balloon of $0 with this set to YES. To model "13th payments" (one extra payment per year): enter a balloon in the regular amount with this set to NO.

Exact Method

The difference is generally a few dollars per $10,000 or a few hundredths of a basis point. Tables generated from the Present Value screen always list individual payments (equivalent to Exact), so the table total may differ slightly from the screen total unless Exact Mode is on.

Rule of 78s

An accounting method that front-loads interest allocation, favoring the lender on early repayment. Payment amounts are not affected — only the split between interest and principal in the schedule.

Available only with basic (non-advanced) amortization. Automatically disabled when Advanced Options are active, because there is no standard for Rule of 78 with balloon payments or rate changes.