Estimate the growth and final value of your Series EE Savings Bonds.
Semi-Annually (Standard)
Annually
Monthly
Estimated Value at Maturity:
Total Earnings (Accrued Amount):
Guaranteed Double Check (20 yrs):
How the Series EE Savings Bond Calculator Works
Series EE savings bonds are low-risk savings products issued by the U.S. Treasury. This calculator uses the fixed-rate method applied to bonds issued after May 2005. It accounts for compounding interest over the life of the bond, typically up to 30 years.
The 20-Year Guarantee
A unique feature of Series EE bonds is the Initial Maturity guarantee. The U.S. Treasury guarantees that a bond will at least double in value 20 years after the purchase date. If the fixed accrual rate is not high enough to double the investment through standard compounding, the Treasury makes a one-time adjustment at the 20-year mark to fulfill this promise.
Calculation Logic
To determine the value, we use the formula for compound interest: A = P(1 + r/n)^(nt).
P: The original purchase amount.
r: The fixed annual accrual rate.
n: Number of times interest compounds per year (Standard is 2 for semi-annual).
t: Number of years the bond is held.
Example Calculation
If you purchase an electronic Series EE bond for $1,000 with a fixed rate of 2.70% and hold it for 20 years:
The standard compounding formula results in approximately $1,708.14.
Because the 20-year guarantee is in effect, the Treasury will adjust the value to $2,000.00 at the 20-year mark.
After the 20-year adjustment, the bond continues to earn the original fixed rate on the new value for another 10 years until final maturity at 30 years.
Tax Considerations
While this calculator provides the gross value, remember that Series EE bond earnings are subject to Federal income tax but are generally exempt from State and Local taxes. You can defer reporting the interest until you cash the bond or it reaches final maturity.
function calculateEEBond() {
var principal = parseFloat(document.getElementById("bondPrincipal").value);
var rate = parseFloat(document.getElementById("accrualRate").value) / 100;
var years = parseFloat(document.getElementById("yearsHeld").value);
var n = parseFloat(document.getElementById("compoundingFreq").value);
if (isNaN(principal) || isNaN(rate) || isNaN(years)) {
alert("Please enter valid numeric values.");
return;
}
// Standard Compound Interest Formula: A = P(1 + r/n)^(nt)
var standardValue = principal * Math.pow((1 + (rate / n)), (n * years));
var finalValue = standardValue;
var doubleNote = "Not applicable for this duration.";
// Logic for the 20-year double guarantee
if (years >= 20) {
var doubledAmount = principal * 2;
// If the years is exactly 20, check if double is higher than standard
if (years === 20) {
if (doubledAmount > standardValue) {
finalValue = doubledAmount;
doubleNote = "Applied (Treasury Double Guarantee)";
} else {
doubleNote = "Standard accrual exceeds double guarantee.";
}
}
// If years > 20, the bond doubled at year 20 then continued growing
else {
var valueAtYear20 = principal * Math.pow((1 + (rate / n)), (n * 20));
var baseAt20 = Math.max(valueAtYear20, doubledAmount);
var remainingYears = years – 20;
finalValue = baseAt20 * Math.pow((1 + (rate / n)), (n * remainingYears));
if (doubledAmount > valueAtYear20) {
doubleNote = "Applied at year 20, then continued accruing.";
} else {
doubleNote = "Standard accrual exceeded double guarantee.";
}
}
} else {
doubleNote = "Guarantee only applies at 20 years.";
}
var earnings = finalValue – principal;
document.getElementById("resMaturityVal").innerText = "$" + finalValue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resEarnings").innerText = "$" + earnings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resDoubleCheck").innerText = doubleNote;
document.getElementById("bondResult").style.display = "block";
}