Inflation Impact on Savings Tool

Project Future Value of Your Current Savings/Investments

See how your current savings might grow and what their purchasing power could be in the future, considering inflation and potential investment returns.

$
%
$
%

Inflation Sensitivity for Future Value

Compare the real future value under different inflation assumptions.

%
%

Plan for a Future Goal (Inflation-Adjusted)

Determine how much money you'll actually need in the future for a goal, considering its cost in today's dollars and inflation.

$
%

Inflation Sensitivity for Goal Target

%
%

Projecting Savings Towards Your Nominal Goal

Enter your current savings for this specific goal and planned annual contributions to see how they might grow towards the calculated nominal future target.

$
$
%

Download Inflation Impact Report

This will generate a PDF summary of your savings projections and goal planning, including any inflation sensitivity analysis performed.

Generated on: ${new Date().toLocaleDateString()}

`; if (lastFVSavingsResults) { pdfHtml += `

Future Value of Current Savings

`; pdfHtml += `

Current Savings: $${lastFVSavingsResults.inputs.pv.toFixed(2)}

Annual Growth Rate: ${lastFVSavingsResults.inputs.annualGrowth.toFixed(1)}%

Annual Contribution: $${lastFVSavingsResults.inputs.annualContrib.toFixed(2)}

Years Projected: ${lastFVSavingsResults.inputs.years}

Main Inflation Rate: ${lastFVSavingsResults.inputs.mainInflation.toFixed(1)}%

`; pdfHtml += `

Nominal Future Value: $${lastFVSavingsResults.main.totalNominalFv.toFixed(2)}

Real Future Value (Today's $): $${lastFVSavingsResults.main.realFv.toFixed(2)}

Loss in Purchasing Power of Initial Principal: $${lastFVSavingsResults.main.lossOfPurchasingPowerInitialPV.toFixed(2)}

Net Change in Purchasing Power (vs. total invested $${lastFVSavingsResults.main.initialPrincipalTotal.toFixed(2)}): $${lastFVSavingsResults.main.netGainLossReal.toFixed(2)}

`; if (lastFVSavingsResults.sensitivity && lastFVSavingsResults.sensitivity.length > 0) { pdfHtml += `

Inflation Sensitivity on Real Future Value:

`; lastFVSavingsResults.sensitivity.forEach(scen => { pdfHtml += ``; }); pdfHtml += `
Inflation RateReal Future Value ($)
${scen.rate.toFixed(1)}% (${scen.name})$${scen.realFv.toFixed(2)}
`; } pdfHtml += `
`; } if (lastGoalResults) { pdfHtml += `

Savings Goal Planner

`; pdfHtml += `

Target Goal (Today's $): $${lastGoalResults.inputs.targetPV.toFixed(2)}

Years Until Goal: ${lastGoalResults.inputs.years}

Main Inflation Rate: ${lastGoalResults.inputs.mainInflation.toFixed(1)}%

`; pdfHtml += `

Nominal Amount Needed in ${lastGoalResults.inputs.years} years: $${lastGoalResults.mainNominalGoal.toFixed(2)}

`; if (lastGoalResults.sensitivity && lastGoalResults.sensitivity.length > 0) { pdfHtml += `

Inflation Sensitivity on Nominal Goal Needed:

`; lastGoalResults.sensitivity.forEach(scen => { pdfHtml += ``; }); pdfHtml += `
Inflation RateNominal Amount Needed ($)
${scen.rate.toFixed(1)}% (${scen.name})$${scen.nominalGoal.toFixed(2)}
`; } if (lastReachGoalResults) { pdfHtml += `

Projection Towards Goal:

Current Savings for Goal: $${lastReachGoalResults.inputs.currentSaved.toFixed(2)}

Planned Annual Contribution: $${lastReachGoalResults.inputs.annualContrib.toFixed(2)}

Expected Annual Return: ${lastReachGoalResults.inputs.annualReturn.toFixed(1)}%

Total Projected Nominal Savings: $${lastReachGoalResults.totalProjectedNominal.toFixed(2)}

Result vs. Nominal Goal ($${lastReachGoalResults.inputs.nominalTarget.toFixed(2)}): ${lastReachGoalResults.shortfallSurplus >= 0 ? 'SURPLUS of $' + lastReachGoalResults.shortfallSurplus.toFixed(2) : 'SHORTFALL of $' + Math.abs(lastReachGoalResults.shortfallSurplus).toFixed(2)}

`; } pdfHtml += `
`; } pdfHtml += `
`; // Close iist-pdf-output if(pdfOutputEl) pdfOutputEl.innerHTML = pdfHtml; const opt = { margin: [0.5, 0.5, 0.5, 0.5], filename: `Inflation_Impact_Savings_Report_${new Date().toISOString().slice(0,10)}.pdf`, image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, useCORS: true, logging: false }, jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' } }; if (typeof html2pdf !== 'undefined' && pdfOutputEl) { html2pdf().from(pdfOutputEl).set(opt).save() .catch(err => { console.error("PDF generation failed:", err); alert("PDF generation error."); }); } else { alert("PDF library not loaded or output element not found."); } }); } // --- Tab Navigation --- window.iist_openTab = function(evt, tabName) { tabs.forEach(tab => { if(tab) tab.style.display = 'none'; }); tabLinks.forEach(link => { if(link) link.classList.remove('active'); }); const activeTabContent = toolContainer.querySelector('#' + tabName); if(activeTabContent) activeTabContent.style.display = 'block'; else { console.error(`Tab content for ${tabName} not found.`); return; } let clickedIndex = -1; if (evt && evt.currentTarget) { evt.currentTarget.classList.add('active'); clickedIndex = tabLinks.indexOf(evt.currentTarget); } else { clickedIndex = tabLinks.findIndex(link => { if (!link) return false; const onclickAttr = link.getAttribute('onclick'); return onclickAttr && onclickAttr.includes(`'${tabName}'`); }); if (clickedIndex !== -1 && tabLinks[clickedIndex]) { tabLinks[clickedIndex].classList.add('active'); } else { if (tabLinks.length > 0 && tabLinks[0]) tabLinks[0].classList.add('active'); clickedIndex = 0; } } currentTabIndex = (clickedIndex !== -1 && clickedIndex < tabs.length) ? clickedIndex : 0; iist_updateNavButtons(); } window.iist_navigateTab = function(direction) { let newIndex = currentTabIndex; if (direction === 'next' && currentTabIndex < tabs.length - 1) newIndex++; else if (direction === 'prev' && currentTabIndex > 0) newIndex--; if (tabLinks[newIndex] && newIndex !== currentTabIndex) tabLinks[newIndex].click(); } function iist_updateNavButtons() { if(prevButton) prevButton.disabled = currentTabIndex === 0; if(nextButton) nextButton.disabled = currentTabIndex >= tabs.length - 1; } // --- LocalStorage for settings --- function loadSettingsFromLocalStorage() { try { const storedYearsSavings = localStorage.getItem(`${toolId}_projYearsSavings`); if (storedYearsSavings && projectionYearsSavingsEl) projectionYearsSavingsEl.value = storedYearsSavings; const storedInflationSavings = localStorage.getItem(`${toolId}_inflationSavings`); if (storedInflationSavings && inflationRateSavingsEl) inflationRateSavingsEl.value = storedInflationSavings; const storedYearsGoal = localStorage.getItem(`${toolId}_projYearsGoal`); if (storedYearsGoal && yearsUntilGoalEl) yearsUntilGoalEl.value = storedYearsGoal; const storedInflationGoal = localStorage.getItem(`${toolId}_inflationGoal`); if (storedInflationGoal && inflationRateGoalEl) inflationRateGoalEl.value = storedInflationGoal; } catch(e) { console.warn("Could not load settings from local storage."); } } function saveSettingsToLocalStorage() { try { if(projectionYearsSavingsEl) localStorage.setItem(`${toolId}_projYearsSavings`, projectionYearsSavingsEl.value); if(inflationRateSavingsEl) localStorage.setItem(`${toolId}_inflationSavings`, inflationRateSavingsEl.value); if(yearsUntilGoalEl) localStorage.setItem(`${toolId}_projYearsGoal`, yearsUntilGoalEl.value); if(inflationRateGoalEl) localStorage.setItem(`${toolId}_inflationGoal`, inflationRateGoalEl.value); } catch (e) { console.warn("Could not save settings to local storage."); } } // Add event listeners to save settings on change [projectionYearsSavingsEl, inflationRateSavingsEl, yearsUntilGoalEl, inflationRateGoalEl].forEach(el => { if(el) el.addEventListener('change', saveSettingsToLocalStorage); }); // --- Initialization --- function initializeTool() { loadSettingsFromLocalStorage(); // Load any saved settings reachGoalSectionEl.style.display = 'none'; // Hide initially iist_openTab(null, 'iist-tab1'); } let iist_attempts = 0; function checkLibrariesAndInit_iist() { if (typeof html2pdf !== 'undefined') { initializeTool(); } else if (iist_attempts < 20) { iist_attempts++; setTimeout(checkLibrariesAndInit_iist, 100); } else { alert("Error: PDF generation library (html2pdf.js) could not be loaded. PDF export will not work."); initializeTool(); } } checkLibrariesAndInit_iist(); })();
Scroll to Top