Compound Interest Calculator

4.8/5 (1,180+ reviews)

A Compound Interest Calculator is a financial tool that estimates the growth of an investment over time by applying interest to both the initial principal and the accumulated interest from previous periods. Use OrangeTool to project your wealth with 100% privacy and accuracy.

Quick Answer

Investing ₹1,00,000 for 10 years at 10% interest compounded annually results in 2,59,374 - more than double your initial investment.

Formula: A = P(1 + r/n)^(nt). Compound interest grows your money exponentially by earning "interest on interest".

Accurate - standard A = P(1+r/n)^nt formula Private - your financial data stays on your device Visual - breakdown of principal vs. interest Last updated: May 2026

The Power of Compounding

Albert Einstein famously called compound interest the "eighth wonder of the world." Unlike simple interest, which is calculated only on the initial amount you invest, compound interest is calculated on the initial principal plus the accumulated interest from previous periods. This creates a "snowball effect" where your wealth grows at an accelerating rate over time.

The Compound Interest Formula

The formula for compound interest is:

Compound Interest Formula Diagram

Where A is the maturity amount, P is the principal, r is the annual interest rate, n is the number of times interest compounds per year, and t is the time in years.

Simple vs. Compound Interest

To understand the difference, imagine you invest 10,000 at a 10% annual rate for 3 years:

The gap might seem small initially, but over 20 or 30 years, compound interest can result in hundreds of percent more wealth than simple interest.

Related Growth Tools

📊
SIP Calculator
🏦
FD Calculator
View All Finance Tools
); calculate(); }; }); const fmt = (v) => { const sym = currentCurrency === 'INR' ? '₹' : '; return sym + Math.round(v).toLocaleString(currentCurrency === 'INR' ? 'en-IN' : 'en-US'); }; function calculate() { const P = parseFloat(document.getElementById('principal').value); const r = parseFloat(document.getElementById('rate').value) / 100; const n = parseInt(document.getElementById('frequency').value); const t = parseFloat(document.getElementById('years').value); if (isNaN(P) || isNaN(r) || isNaN(t) || P <= 0) return; const A = P * Math.pow(1 + r/n, n * t); const interest = A - P; document.getElementById('principal-val').textContent = fmt(P); document.getElementById('interest-val').textContent = fmt(interest); document.getElementById('total-val').textContent = fmt(A); // Update Bar const pPerc = (P / A) * 100; const iPerc = (interest / A) * 100; document.getElementById('bar-principal').style.width = pPerc + '%'; document.getElementById('bar-interest').style.width = iPerc + '%'; document.getElementById('result-area').style.display = 'block'; updateChart(P, r, n, t); } function updateChart(P, r, n, years) { const labels = []; const principalData = []; const totalData = []; for (let yr = 1; yr <= years; yr++) { labels.push(`Year ${yr}`); const A = P * Math.pow(1 + r/n, n * yr); principalData.push(P); totalData.push(Math.round(A)); } if (growthChart) growthChart.destroy(); const ctx = document.getElementById('growthChart').getContext('2d'); growthChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Initial Principal', data: principalData, borderColor: '#ccc', backgroundColor: 'rgba(204, 204, 204, 0.1)', fill: true, tension: 0.1 }, { label: 'Future Value', data: totalData, borderColor: '#ff6b00', backgroundColor: 'rgba(255, 107, 0, 0.1)', fill: true, tension: 0.4 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' }, tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${fmt(context.raw)}` } } }, scales: { y: { beginAtZero: true, ticks: { callback: (value) => (currentCurrency === 'INR' ₹ '₹' : '$') + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ; return sym + Math.round(v).toLocaleString(currentCurrency === 'INR' ? 'en-IN' : 'en-US'); }; function calculate() { const P = parseFloat(document.getElementById('principal').value); const r = parseFloat(document.getElementById('rate').value) / 100; const n = parseInt(document.getElementById('frequency').value); const t = parseFloat(document.getElementById('years').value); if (isNaN(P) || isNaN(r) || isNaN(t) || P <= 0) return; const A = P * Math.pow(1 + r/n, n * t); const interest = A - P; document.getElementById('principal-val').textContent = fmt(P); document.getElementById('interest-val').textContent = fmt(interest); document.getElementById('total-val').textContent = fmt(A); // Update Bar const pPerc = (P / A) * 100; const iPerc = (interest / A) * 100; document.getElementById('bar-principal').style.width = pPerc + '%'; document.getElementById('bar-interest').style.width = iPerc + '%'; document.getElementById('result-area').style.display = 'block'; updateChart(P, r, n, t); } function updateChart(P, r, n, years) { const labels = []; const principalData = []; const totalData = []; for (let yr = 1; yr <= years; yr++) { labels.push(`Year ${yr}`); const A = P * Math.pow(1 + r/n, n * yr); principalData.push(P); totalData.push(Math.round(A)); } if (growthChart) growthChart.destroy(); const ctx = document.getElementById('growthChart').getContext('2d'); growthChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Initial Principal', data: principalData, borderColor: '#ccc', backgroundColor: 'rgba(204, 204, 204, 0.1)', fill: true, tension: 0.1 }, { label: 'Future Value', data: totalData, borderColor: '#ff6b00', backgroundColor: 'rgba(255, 107, 0, 0.1)', fill: true, tension: 0.4 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' }, tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${fmt(context.raw)}` } } }, scales: { y: { beginAtZero: true, ticks: { callback: (value) => (currentCurrency === 'INR' ? '₹' : ') + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ) + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ; return sym + Math.round(v).toLocaleString(currentCurrency === 'INR' ? 'en-IN' : 'en-US'); }; function calculate() { const P = parseFloat(document.getElementById('principal').value); const r = parseFloat(document.getElementById('rate').value) / 100; const n = parseInt(document.getElementById('frequency').value); const t = parseFloat(document.getElementById('years').value); if (isNaN(P) || isNaN(r) || isNaN(t) || P <= 0) return; const A = P * Math.pow(1 + r/n, n * t); const interest = A - P; document.getElementById('principal-val').textContent = fmt(P); document.getElementById('interest-val').textContent = fmt(interest); document.getElementById('total-val').textContent = fmt(A); // Update Bar const pPerc = (P / A) * 100; const iPerc = (interest / A) * 100; document.getElementById('bar-principal').style.width = pPerc + '%'; document.getElementById('bar-interest').style.width = iPerc + '%'; document.getElementById('result-area').style.display = 'block'; updateChart(P, r, n, t); } function updateChart(P, r, n, years) { const labels = []; const principalData = []; const totalData = []; for (let yr = 1; yr <= years; yr++) { labels.push(`Year ${yr}`); const A = P * Math.pow(1 + r/n, n * yr); principalData.push(P); totalData.push(Math.round(A)); } if (growthChart) growthChart.destroy(); const ctx = document.getElementById('growthChart').getContext('2d'); growthChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Initial Principal', data: principalData, borderColor: '#ccc', backgroundColor: 'rgba(204, 204, 204, 0.1)', fill: true, tension: 0.1 }, { label: 'Future Value', data: totalData, borderColor: '#ff6b00', backgroundColor: 'rgba(255, 107, 0, 0.1)', fill: true, tension: 0.4 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' }, tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${fmt(context.raw)}` } } }, scales: { y: { beginAtZero: true, ticks: { callback: (value) => (currentCurrency === 'INR' ? '₹' : ') + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ); calculate(); }; }); const fmt = (v) => { const sym = currentCurrency === 'INR' ? '₹' : '; return sym + Math.round(v).toLocaleString(currentCurrency === 'INR' ? 'en-IN' : 'en-US'); }; function calculate() { const P = parseFloat(document.getElementById('principal').value); const r = parseFloat(document.getElementById('rate').value) / 100; const n = parseInt(document.getElementById('frequency').value); const t = parseFloat(document.getElementById('years').value); if (isNaN(P) || isNaN(r) || isNaN(t) || P <= 0) return; const A = P * Math.pow(1 + r/n, n * t); const interest = A - P; document.getElementById('principal-val').textContent = fmt(P); document.getElementById('interest-val').textContent = fmt(interest); document.getElementById('total-val').textContent = fmt(A); // Update Bar const pPerc = (P / A) * 100; const iPerc = (interest / A) * 100; document.getElementById('bar-principal').style.width = pPerc + '%'; document.getElementById('bar-interest').style.width = iPerc + '%'; document.getElementById('result-area').style.display = 'block'; updateChart(P, r, n, t); } function updateChart(P, r, n, years) { const labels = []; const principalData = []; const totalData = []; for (let yr = 1; yr <= years; yr++) { labels.push(`Year ${yr}`); const A = P * Math.pow(1 + r/n, n * yr); principalData.push(P); totalData.push(Math.round(A)); } if (growthChart) growthChart.destroy(); const ctx = document.getElementById('growthChart').getContext('2d'); growthChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Initial Principal', data: principalData, borderColor: '#ccc', backgroundColor: 'rgba(204, 204, 204, 0.1)', fill: true, tension: 0.1 }, { label: 'Future Value', data: totalData, borderColor: '#ff6b00', backgroundColor: 'rgba(255, 107, 0, 0.1)', fill: true, tension: 0.4 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' }, tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${fmt(context.raw)}` } } }, scales: { y: { beginAtZero: true, ticks: { callback: (value) => (currentCurrency === 'INR' ₹ '₹' : '$') + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ; return sym + Math.round(v).toLocaleString(currentCurrency === 'INR' ? 'en-IN' : 'en-US'); }; function calculate() { const P = parseFloat(document.getElementById('principal').value); const r = parseFloat(document.getElementById('rate').value) / 100; const n = parseInt(document.getElementById('frequency').value); const t = parseFloat(document.getElementById('years').value); if (isNaN(P) || isNaN(r) || isNaN(t) || P <= 0) return; const A = P * Math.pow(1 + r/n, n * t); const interest = A - P; document.getElementById('principal-val').textContent = fmt(P); document.getElementById('interest-val').textContent = fmt(interest); document.getElementById('total-val').textContent = fmt(A); // Update Bar const pPerc = (P / A) * 100; const iPerc = (interest / A) * 100; document.getElementById('bar-principal').style.width = pPerc + '%'; document.getElementById('bar-interest').style.width = iPerc + '%'; document.getElementById('result-area').style.display = 'block'; updateChart(P, r, n, t); } function updateChart(P, r, n, years) { const labels = []; const principalData = []; const totalData = []; for (let yr = 1; yr <= years; yr++) { labels.push(`Year ${yr}`); const A = P * Math.pow(1 + r/n, n * yr); principalData.push(P); totalData.push(Math.round(A)); } if (growthChart) growthChart.destroy(); const ctx = document.getElementById('growthChart').getContext('2d'); growthChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Initial Principal', data: principalData, borderColor: '#ccc', backgroundColor: 'rgba(204, 204, 204, 0.1)', fill: true, tension: 0.1 }, { label: 'Future Value', data: totalData, borderColor: '#ff6b00', backgroundColor: 'rgba(255, 107, 0, 0.1)', fill: true, tension: 0.4 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' }, tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${fmt(context.raw)}` } } }, scales: { y: { beginAtZero: true, ticks: { callback: (value) => (currentCurrency === 'INR' ? '₹' : ') + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ) + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ) + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ); calculate(); }; }); const fmt = (v) => { const sym = currentCurrency === 'INR' ? '₹' : '; return sym + Math.round(v).toLocaleString(currentCurrency === 'INR' ? 'en-IN' : 'en-US'); }; function calculate() { const P = parseFloat(document.getElementById('principal').value); const r = parseFloat(document.getElementById('rate').value) / 100; const n = parseInt(document.getElementById('frequency').value); const t = parseFloat(document.getElementById('years').value); if (isNaN(P) || isNaN(r) || isNaN(t) || P <= 0) return; const A = P * Math.pow(1 + r/n, n * t); const interest = A - P; document.getElementById('principal-val').textContent = fmt(P); document.getElementById('interest-val').textContent = fmt(interest); document.getElementById('total-val').textContent = fmt(A); // Update Bar const pPerc = (P / A) * 100; const iPerc = (interest / A) * 100; document.getElementById('bar-principal').style.width = pPerc + '%'; document.getElementById('bar-interest').style.width = iPerc + '%'; document.getElementById('result-area').style.display = 'block'; updateChart(P, r, n, t); } function updateChart(P, r, n, years) { const labels = []; const principalData = []; const totalData = []; for (let yr = 1; yr <= years; yr++) { labels.push(`Year ${yr}`); const A = P * Math.pow(1 + r/n, n * yr); principalData.push(P); totalData.push(Math.round(A)); } if (growthChart) growthChart.destroy(); const ctx = document.getElementById('growthChart').getContext('2d'); growthChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Initial Principal', data: principalData, borderColor: '#ccc', backgroundColor: 'rgba(204, 204, 204, 0.1)', fill: true, tension: 0.1 }, { label: 'Future Value', data: totalData, borderColor: '#ff6b00', backgroundColor: 'rgba(255, 107, 0, 0.1)', fill: true, tension: 0.4 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' }, tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${fmt(context.raw)}` } } }, scales: { y: { beginAtZero: true, ticks: { callback: (value) => (currentCurrency === 'INR' ? '₹' : ') + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ; return sym + Math.round(v).toLocaleString(currentCurrency === 'INR' ? 'en-IN' : 'en-US'); }; function calculate() { const P = parseFloat(document.getElementById('principal').value); const r = parseFloat(document.getElementById('rate').value) / 100; const n = parseInt(document.getElementById('frequency').value); const t = parseFloat(document.getElementById('years').value); if (isNaN(P) || isNaN(r) || isNaN(t) || P <= 0) return; const A = P * Math.pow(1 + r/n, n * t); const interest = A - P; document.getElementById('principal-val').textContent = fmt(P); document.getElementById('interest-val').textContent = fmt(interest); document.getElementById('total-val').textContent = fmt(A); // Update Bar const pPerc = (P / A) * 100; const iPerc = (interest / A) * 100; document.getElementById('bar-principal').style.width = pPerc + '%'; document.getElementById('bar-interest').style.width = iPerc + '%'; document.getElementById('result-area').style.display = 'block'; updateChart(P, r, n, t); } function updateChart(P, r, n, years) { const labels = []; const principalData = []; const totalData = []; for (let yr = 1; yr <= years; yr++) { labels.push(`Year ${yr}`); const A = P * Math.pow(1 + r/n, n * yr); principalData.push(P); totalData.push(Math.round(A)); } if (growthChart) growthChart.destroy(); const ctx = document.getElementById('growthChart').getContext('2d'); growthChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Initial Principal', data: principalData, borderColor: '#ccc', backgroundColor: 'rgba(204, 204, 204, 0.1)', fill: true, tension: 0.1 }, { label: 'Future Value', data: totalData, borderColor: '#ff6b00', backgroundColor: 'rgba(255, 107, 0, 0.1)', fill: true, tension: 0.4 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' }, tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${fmt(context.raw)}` } } }, scales: { y: { beginAtZero: true, ticks: { callback: (value) => (currentCurrency === 'INR' ? '₹' : ') + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ) + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ) + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ; return sym + Math.round(v).toLocaleString(currentCurrency === 'INR' ? 'en-IN' : 'en-US'); }; function calculate() { const P = parseFloat(document.getElementById('principal').value); const r = parseFloat(document.getElementById('rate').value) / 100; const n = parseInt(document.getElementById('frequency').value); const t = parseFloat(document.getElementById('years').value); if (isNaN(P) || isNaN(r) || isNaN(t) || P <= 0) return; const A = P * Math.pow(1 + r/n, n * t); const interest = A - P; document.getElementById('principal-val').textContent = fmt(P); document.getElementById('interest-val').textContent = fmt(interest); document.getElementById('total-val').textContent = fmt(A); // Update Bar const pPerc = (P / A) * 100; const iPerc = (interest / A) * 100; document.getElementById('bar-principal').style.width = pPerc + '%'; document.getElementById('bar-interest').style.width = iPerc + '%'; document.getElementById('result-area').style.display = 'block'; updateChart(P, r, n, t); } function updateChart(P, r, n, years) { const labels = []; const principalData = []; const totalData = []; for (let yr = 1; yr <= years; yr++) { labels.push(`Year ${yr}`); const A = P * Math.pow(1 + r/n, n * yr); principalData.push(P); totalData.push(Math.round(A)); } if (growthChart) growthChart.destroy(); const ctx = document.getElementById('growthChart').getContext('2d'); growthChart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [ { label: 'Initial Principal', data: principalData, borderColor: '#ccc', backgroundColor: 'rgba(204, 204, 204, 0.1)', fill: true, tension: 0.1 }, { label: 'Future Value', data: totalData, borderColor: '#ff6b00', backgroundColor: 'rgba(255, 107, 0, 0.1)', fill: true, tension: 0.4 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top' }, tooltip: { callbacks: { label: (context) => `${context.dataset.label}: ${fmt(context.raw)}` } } }, scales: { y: { beginAtZero: true, ticks: { callback: (value) => (currentCurrency === 'INR' ? '₹' : ') + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate(); ) + (value/100000).toFixed(1) + 'L' } } } } }); } document.getElementById('calc-btn').onclick = calculate; ['principal', 'rate', 'years', 'frequency'].forEach(id => { document.getElementById(id).oninput = calculate; }); calculate();