Data Source and Methodology
Primary Source: OpenStax, “Business Mathematics,” Section 13.5: Amortized Loans (2018). https://openstax.org/details/books/business-mathematics
Government Guidance: Consumer Financial Protection Bureau (CFPB), “What is amortization and how does it work?” (2020-11-20). https://www.consumerfinance.gov/ask-cfpb/what-is-amortization-en-1065/
Tutti i calcoli si basano rigorosamente sulle formule e sui dati forniti da queste fonti autorevoli.
The Formula Explained
Standard payment (given balance \(B\) and \(n\) months):
\( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \).
New payoff months when adding monthly extra \(E\) (no lump sum):
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \).
Amortization update each month (simulation used for lump sums):
\( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Glossary of Variables
- B (Balance): Current principal owed on the loan.
- APR: Annual percentage rate (nominal), used to derive the monthly rate.
- i: Monthly interest rate (APR/12).
- n: Remaining number of months on the mortgage.
- M: Scheduled monthly principal-and-interest payment with no extra.
- E: Extra amount added to each monthly payment (if selected).
- n' New number of months to payoff when making extra payments.
- L: One-time lump sum applied to principal at a chosen future month.
How It Works: A Step-by-Step Example
Suppose your current balance \( B = \$300{,}000 \) at APR \( = 6\% \) with 25 years remaining (\( n = 300 \) months). The monthly rate is \( i = 0.06/12 = 0.005 \).
Now add a monthly extra \( E = \$200 \), so the total payment is \( M + E \approx \$2{,}133.28 \). Using the payoff formula:
You would be debt-free about 45 months sooner (≈ 3 years and 9 months earlier), saving tens of thousands in interest. If you choose a single lump sum early in the schedule, the calculator simulates amortization month-by-month to show the impact precisely.
Frequently Asked Questions (FAQ)
Does the calculator include taxes, insurance, or PMI?
No. It models principal and interest only so you can isolate the effect of extra payments.
What if my APR changes?
This tool assumes a fixed APR. For adjustable-rate mortgages, results will differ when the rate resets.
Is biweekly payment support available?
Not directly, but you can approximate by entering a monthly extra equal to half a payment every month.
Why are my lender’s numbers slightly different?
Lenders may apply daily interest, vary posting dates, and round to the cent each cycle. Those operational details can create small differences.
Can I model multiple lump sums?
This version supports one lump sum. You can approximate multiple by running separate scenarios or using the monthly extra field.
What if my scheduled payment is too low to amortize?
If payment ≤ monthly interest, the balance won’t decrease. Increase the extra payment or verify your remaining term and APR.
Formula (LaTeX) + variables + units
','\
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \
Audit: Complete
Formula (LaTeX) + variables + units
This section shows the formulas used by the calculator engine, plus variable definitions and units.
Formula (extracted LaTeX)
\[','\\]
','\
Formula (extracted LaTeX)
\[= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =\]
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Formula (extracted text)
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Formula (extracted text)
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \
Audit: Complete
Formula (LaTeX) + variables + units
This section shows the formulas used by the calculator engine, plus variable definitions and units.
Formula (extracted LaTeX)
\[','\\]
','\
Formula (extracted LaTeX)
\[= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =\]
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Formula (extracted text)
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Formula (extracted text)
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \
Audit: Complete
Formula (LaTeX) + variables + units
This section shows the formulas used by the calculator engine, plus variable definitions and units.
Formula (extracted LaTeX)
\[','\\]
','\
Formula (extracted LaTeX)
\[= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =\]
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Formula (extracted text)
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Formula (extracted text)
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \
Audit: Complete
Formula (LaTeX) + variables + units
This section shows the formulas used by the calculator engine, plus variable definitions and units.
Formula (extracted LaTeX)
\[','\\]
','\
Formula (extracted LaTeX)
\[= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =\]
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Formula (extracted text)
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Formula (extracted text)
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \
Audit: Complete
Formula (LaTeX) + variables + units
This section shows the formulas used by the calculator engine, plus variable definitions and units.
Formula (extracted LaTeX)
\[','\\]
','\
Formula (extracted LaTeX)
\[= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =\]
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Formula (extracted text)
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Formula (extracted text)
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \
Formula (LaTeX) + variables + units
This section shows the exact formulas used by the calculator engine, plus variable definitions and units.
Formula (extracted LaTeX)
\[','\\]
','\
Formula (extracted LaTeX)
\[= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =\]
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Formula (extracted text)
\[\]
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Formula (extracted text)
\[\]
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \
Formula (LaTeX) + variables + units
This section shows the exact formulas used by the calculator engine, plus variable definitions and units.
Formula (extracted LaTeX)
\[','\\]
','\
Formula (extracted LaTeX)
\[= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =\]
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Formula (extracted text)
\[\]
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Formula (extracted text)
\[\]
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \
Formula (LaTeX) + variables + units
This section shows the exact formulas used by the calculator engine, plus variable definitions and units.
Formula (extracted LaTeX)
\[','\\]
','\
Formula (extracted LaTeX)
\[= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =\]
= (sel, ctx=document) => Array.from(ctx.querySelectorAll(sel)); const curr = new Intl.NumberFormat(undefined, { style:'currency', currency: guessCurrency() }); function guessCurrency(){ try{ const region = Intl.DateTimeFormat().resolvedOptions().locale?.split('-')[1] || ''; if(region === 'GB') return 'GBP'; if(region === 'CA') return 'CAD'; if(region === 'AU') return 'AUD'; if(['EU','DE','FR','ES','IT','NL','IE','PT'].includes(region)) return 'EUR'; }catch(e){} return 'USD'; } // Elements const balance = $('#balance'); const apr = $('#apr'); const years = $('#years'); const months = $('#months'); const monthlyExtraGroup = $('#monthlyExtraGroup'); const monthlyExtra = $('#monthlyExtra'); const onceGroup = $('#onceGroup'); const lumpSum = $('#lumpSum'); const lumpMonth = $('#lumpMonth'); const extraType =
Formula (extracted text)
\[\]
Monthly rate: \( i = \text{APR}/100/12 \) Standard payment (given balance \(B\) and \(n\) months): \( M = B \cdot \big[ i / \big(1 - (1 + i)^{-n}\big) \big] \) for \( i > 0 \); otherwise \( M = B/n \). New payoff months when adding monthly extra \(E\) (no lump sum): \( n' = \left\lceil - \dfrac{\ln\!\big(1 - i\,B/(M+E)\big)}{\ln(1+i)} \right\rceil \). Amortization update each month (simulation used for lump sums): \( \text{Interest}_t = B_t \cdot i \); \( \text{Principal}_t = \text{Payment}_t - \text{Interest}_t \); \( B_{t+1} = \max(0, B_t - \text{Principal}_t) \).
Formula (extracted text)
\[\]
\( M = 300000 \times \big[ 0.005 \,/\, (1 - (1.005)^{-300}) \big] \approx \$1{,}933.28 \)
Formula (extracted text)
\[\]
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
Variables and units
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
Sources (authoritative):
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/
- Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
0.1.0-draft · 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.
{,}933.28 \)
Formula (extracted text)
\[\]
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
Variables and units
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
Sources (authoritative):
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/
- Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
0.1.0-draft · 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.
{,}933.28 \)
Formula (extracted text)
\[\]
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
Variables and units
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
Sources (authoritative):
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/
- Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
0.1.0-draft · 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.
{,}933.28 \)
Formula (extracted text)
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
Variables and units
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
Sources (authoritative):
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/
- Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
0.1.0-draft · 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.
{,}933.28 \)
Formula (extracted text)
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
Variables and units
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
Sources (authoritative):
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/
- Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
0.1.0-draft · 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.
{,}933.28 \)
Formula (extracted text)
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
Variables and units
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
Sources (authoritative):
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/
- Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
0.1.0-draft · 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.
{,}933.28 \)
Formula (extracted text)
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
Variables and units
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
Sources (authoritative):
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/
- Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
0.1.0-draft · 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.
{,}933.28 \)
Formula (extracted text)
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
Variables and units
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
Sources (authoritative):
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/
- Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
0.1.0-draft · 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.
{,}933.28 \)
\( n' = \left\lceil - \dfrac{\ln\!\big(1 - 0.005 \times 300000 / 2133.28\big)}{\ln(1.005)} \right\rceil \approx 255 \text{ months} \)
- P = principal (loan amount) (currency)
- r = periodic interest rate (annual rate ÷ payments per year) (1)
- n = total number of payments (years × payments per year) (count)
- M = periodic payment for principal + interest (currency)
- T = property tax (annual or monthly depending on input) (currency)
- I = homeowners insurance (annual or monthly depending on input) (currency)
- PMI = private mortgage insurance (monthly) (currency)
- Home — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/ - Finance — calcdomain.com · Accessed 2026-01-19
https://calcdomain.com/finance
Last code update: 2026-01-19
- Initial audit spec draft generated from HTML extraction (review required).
- Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
- Confirm sources are authoritative and relevant to the calculator methodology.