{"product_id":"bond-calculator","title":"Bond Calculator","description":"\u003cstyle\u003e\n.bnd-calculator{--ink:#0f172a;--muted:#475569;--border:#e2e8f0;--surface:#ffffff;--tint:#f8fafc;--primary:#1d4ed8;--accent:#c2410c;--accent-hover:#9a3412;--chart-1:#1e40af;--chart-2:#0d9488;--chart-3:#7c3aed;--chart-4:#be185d;--chart-5:#334155;max-width:1200px;margin:0 auto;color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;font-size:15px;line-height:1.55;container-type:inline-size}\n.bnd-calculator,.bnd-calculator *,.bnd-calculator *::before,.bnd-calculator *::after{box-sizing:border-box}\n.bnd-calculator [hidden]{display:none!important}\n.bnd-calculator button,.bnd-calculator input,.bnd-calculator select{font:inherit}\n.bnd-calculator button{cursor:pointer}\n.bnd-calculator a{color:var(--primary);text-underline-offset:2px}\n.bnd-calculator a:hover{text-decoration-thickness:2px}\n.bnd-header{padding:24px 0 16px;border-bottom:1px solid var(--border)}\n.bnd-header h2{margin:0;font-size:24px;line-height:1.25;font-weight:700;letter-spacing:-.02em}\n.bnd-header p{margin:8px 0 0;color:var(--muted);max-width:760px}\n.bnd-pills{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}\n.bnd-pill{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:6px 10px;border:1px solid var(--border);border-radius:999px;background:var(--tint);color:var(--muted);font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}\n.bnd-pill strong{color:var(--ink);font-weight:700}\n.bnd-toolbar{display:flex;flex-wrap:wrap;gap:8px;padding:16px 0}\n.bnd-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:44px;padding:11px 18px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--ink);font-weight:700;line-height:1;white-space:nowrap;box-shadow:0 1px 2px rgba(15,23,42,.06)}\n.bnd-btn:hover{border-color:#cbd5e1;box-shadow:0 2px 5px rgba(15,23,42,.10)}\n.bnd-btn:focus-visible,.bnd-input:focus-visible,.bnd-select:focus-visible,.bnd-segment button:focus-visible,.bnd-mode-button:focus-visible,.bnd-summary-button:focus-visible{outline:3px solid rgba(29,78,216,.35);outline-offset:2px}\n.bnd-download{order:-1;background:var(--accent);border-color:var(--accent);color:#fff}\n.bnd-download:hover,.bnd-download:active{background:var(--accent-hover);border-color:var(--accent-hover)}\n.bnd-download svg{width:18px;height:18px;flex:none}\n.bnd-workspace{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-items:start}\n.bnd-panel,.bnd-breakdown,.bnd-chart-card,.bnd-table-card,.bnd-education{min-width:0;border:1px solid var(--border);border-radius:8px;background:var(--surface);box-shadow:0 1px 2px rgba(15,23,42,.06)}\n.bnd-panel{padding:20px}\n.bnd-panel-head{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px 16px;margin-bottom:16px}\n.bnd-panel-head h3,.bnd-breakdown h3,.bnd-chart-card h3,.bnd-table-card h3,.bnd-education h2,.bnd-education h3{margin:0;color:var(--ink)}\n.bnd-panel-head h3,.bnd-breakdown h3,.bnd-chart-card h3,.bnd-table-card h3{font-size:18px;line-height:1.35;font-weight:650}\n.bnd-panel-head p,.bnd-section-intro{margin:4px 0 0;color:var(--muted);font-size:13px;font-weight:500}\n.bnd-mode-fieldset{min-width:0;margin:0 0 20px;padding:0;border:0}\n.bnd-mode-fieldset legend{display:block;margin-bottom:8px;font-size:14px;font-weight:600}\n.bnd-mode-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;padding:4px;border:1px solid var(--border);border-radius:8px;background:var(--tint)}\n.bnd-mode-button{min-width:0;min-height:42px;padding:8px 10px;border:0;border-radius:6px;background:transparent;color:var(--muted);font-weight:700}\n.bnd-mode-button[aria-pressed=\"true\"]{background:var(--surface);color:var(--primary);box-shadow:0 1px 2px rgba(15,23,42,.10)}\n.bnd-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:16px}\n.bnd-field{display:flex;min-width:0;flex-direction:column;gap:6px;align-self:start}\n.bnd-field label,.bnd-field-label{font-size:14px;font-weight:600;color:var(--ink)}\n.bnd-input,.bnd-select{width:100%;min-width:0;min-height:44px;padding:9px 11px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:var(--ink);font-size:15px;font-variant-numeric:tabular-nums}\n.bnd-input:disabled{background:#f1f5f9;color:#334155;opacity:1}\n.bnd-help{min-height:40px;margin:0;color:var(--muted);font-size:13px;font-weight:500;line-height:1.45}\n.bnd-error{min-height:19px;margin:0;color:#b91c1c;font-size:13px;font-weight:600;line-height:1.4}\n.bnd-segment{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px;min-height:44px;padding:4px;border:1px solid #cbd5e1;border-radius:6px;background:var(--tint)}\n.bnd-segment button{min-width:0;border:0;border-radius:4px;background:transparent;color:var(--muted);font-size:13px;font-weight:700}\n.bnd-segment button[aria-pressed=\"true\"]{background:var(--surface);color:var(--primary);box-shadow:0 1px 2px rgba(15,23,42,.10)}\n.bnd-global-error{margin:16px 0 0;padding:10px 12px;border:1px solid #fecaca;border-radius:6px;background:#fef2f2;color:#991b1b;font-size:13px;font-weight:600}\n.bnd-results{display:flex;min-width:0;flex-direction:column;gap:16px}\n.bnd-primary-result{padding:18px;border:1px solid #bfdbfe;border-radius:8px;background:#eff6ff}\n.bnd-primary-label{margin:0;color:#1e3a8a;font-size:13px;font-weight:700;text-transform:uppercase;letter-spacing:.05em}\n.bnd-primary-value{margin:4px 0 0;color:#172554;font-size:30px;line-height:1.15;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}\n.bnd-primary-note{margin:8px 0 0;color:#1e3a8a;font-size:13px;font-weight:500}\n.bnd-result-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,145px),1fr));gap:10px}\n.bnd-result-card{min-width:0;padding:14px;border:1px solid var(--border);border-radius:8px;background:var(--tint)}\n.bnd-result-card span{display:block;color:var(--muted);font-size:13px;font-weight:600}\n.bnd-result-card strong{display:block;margin-top:4px;color:var(--ink);font-size:20px;line-height:1.25;font-weight:700;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}\n.bnd-summary-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}\n.bnd-summary-list li{display:grid;grid-template-columns:minmax(0,max-content) minmax(0,max-content);justify-content:start;gap:8px 16px;align-items:baseline;padding-bottom:8px;border-bottom:1px solid var(--border)}\n.bnd-summary-list li:last-child{padding-bottom:0;border-bottom:0}\n.bnd-summary-list span{color:var(--muted);font-size:13px;font-weight:600}\n.bnd-summary-list strong{font-variant-numeric:tabular-nums}\n.bnd-breakdown,.bnd-chart-card,.bnd-table-card{margin-top:16px;padding:20px}\n.bnd-chart-cluster{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:center;justify-content:center;max-width:720px;margin:20px auto 0}\n.bnd-chart-plot{min-width:0;display:flex;align-items:center;justify-content:center}\n.bnd-donut-svg{display:block;width:min(100%,280px);height:auto;aspect-ratio:1}\n.bnd-chart-legend{display:grid;min-width:0;gap:10px;align-content:center;justify-content:start}\n.bnd-legend-row{display:grid;grid-template-columns:12px minmax(0,max-content) minmax(0,max-content) minmax(0,max-content);gap:8px 12px;align-items:center;justify-content:start;color:var(--ink);font-size:13px;font-weight:600;font-variant-numeric:tabular-nums}\n.bnd-swatch{width:12px;height:12px;border-radius:3px}\n.bnd-legend-amount,.bnd-legend-percent{color:var(--muted)}\n.bnd-chart-callout,.bnd-table-note{margin-top:16px;padding:10px 12px;border:1px solid var(--border);border-radius:6px;background:var(--tint);color:var(--muted);font-size:13px;font-weight:500}\n.bnd-chart-empty{max-width:560px;margin:16px auto 0;padding:16px;border:1px dashed #cbd5e1;border-radius:6px;background:var(--tint);color:var(--muted);text-align:center;font-size:13px;font-weight:600}\n.bnd-safe-stack .bnd-chart-cluster{grid-template-columns:minmax(0,1fr)!important;row-gap:24px!important;max-width:640px!important}\n.bnd-safe-stack .bnd-chart-legend{justify-content:center!important}\n.bnd-safe-stack .bnd-chart-callout{margin-top:20px!important}\n.bnd-cashflow-wrap{display:grid;gap:16px;margin-top:20px}\n.bnd-cashflow-svg{display:block;width:100%;height:320px;min-height:0;max-height:none}\n.bnd-cashflow-legend{display:flex;flex-wrap:wrap;gap:10px 20px;align-items:center;justify-content:center}\n.bnd-cashflow-legend .bnd-legend-row{grid-template-columns:12px minmax(0,max-content)}\n.bnd-chart-summary-wrap{overflow-x:auto;margin-top:16px;border:1px solid var(--border);border-radius:6px}.bnd-chart-summary-wrap .bnd-table{min-width:440px}\n.bnd-table-wrap{overflow-x:auto;margin-top:16px;border:1px solid var(--border);border-radius:6px}\n.bnd-table{width:100%;min-width:720px;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}\n.bnd-table th,.bnd-table td{padding:9px 10px;border-bottom:1px solid var(--border);text-align:right;white-space:nowrap}\n.bnd-table th{background:#f1f5f9;color:#334155;font-weight:700}\n.bnd-table th:first-child,.bnd-table td:first-child{text-align:left}\n.bnd-table tbody tr:last-child td{border-bottom:0}\n.bnd-table tbody tr:hover td{background:#f8fafc}\n.bnd-safe-table-stack .bnd-table-wrap{height:auto!important;max-height:none!important}\n.bnd-safe-table-stack .bnd-table-note{margin-top:20px!important}\n.bnd-education{margin-top:24px;padding:24px}\n.bnd-education h2{font-size:22px;line-height:1.3;font-weight:700}\n.bnd-education h3{margin-top:24px;font-size:18px;line-height:1.35;font-weight:650}\n.bnd-education p{margin:10px 0 0;color:#334155}\n.bnd-education ul{margin:10px 0 0;padding-left:22px;color:#334155}\n.bnd-education li+li{margin-top:7px}\n.bnd-formula{margin-top:12px;padding:12px;border-left:4px solid var(--primary);background:var(--tint);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}\n.bnd-visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}\n@container (min-width:640px){.bnd-chart-cluster{grid-template-columns:minmax(220px,300px) minmax(0,max-content);column-gap:28px}.bnd-chart-legend{justify-content:start}}\n@container (min-width:900px){.bnd-workspace{grid-template-columns:minmax(0,1.02fr) minmax(0,.98fr)}.bnd-panel{padding:24px}}\n@container (max-width:639px){.bnd-header{padding-top:16px}.bnd-toolbar .bnd-btn{flex:1 1 auto}.bnd-download{flex-basis:100%!important}.bnd-panel,.bnd-breakdown,.bnd-chart-card,.bnd-table-card,.bnd-education{padding:16px}.bnd-mode-switch{grid-template-columns:minmax(0,1fr)}.bnd-legend-row{grid-template-columns:12px minmax(0,max-content) minmax(0,max-content);gap:8px}.bnd-legend-percent{grid-column:2 \/ span 2}.bnd-primary-value{font-size:27px}.bnd-chart-callout,.bnd-table-note{margin-top:12px}.bnd-cashflow-svg{height:300px}.bnd-table th,.bnd-table td{padding:8px}.bnd-help{min-height:0}}\n\u003c\/style\u003e\n\u003cdiv class=\"bnd-calculator\" data-calculator-root\u003e\n  \u003csection class=\"bnd-header\"\u003e\n    \u003ch2\u003eBond Calculator\u003c\/h2\u003e\n    \u003cp\u003eValue a fixed-rate bond on a coupon date, solve for an unknown bond term, or calculate clean and dirty prices between coupon payments.\u003c\/p\u003e\n    \u003cdiv class=\"bnd-pills\" aria-label=\"Live bond summary\"\u003e\n      \u003cspan class=\"bnd-pill\"\u003eMode \u003cstrong class=\"bnd-pill-mode\"\u003eCoupon-date value\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"bnd-pill\"\u003ePrice \u003cstrong class=\"bnd-pill-price\"\u003e$97.3270\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"bnd-pill\"\u003eYield \u003cstrong class=\"bnd-pill-yield\"\u003e6.00%\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"bnd-pill\"\u003ePayments \u003cstrong class=\"bnd-pill-payments\"\u003e3\u003c\/strong\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv class=\"bnd-toolbar\" aria-label=\"Calculator actions\"\u003e\n    \u003cbutton class=\"bnd-btn bnd-download\" type=\"button\"\u003e\n      \u003csvg viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003cpath fill=\"currentColor\" d=\"M11 3h2v10.17l3.59-3.58L18 11l-6 6-6-6 1.41-1.41L11 13.17V3Zm-6 16h14v2H5v-2Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n      \u003cspan\u003eDownload Excel\u003c\/span\u003e\n    \u003c\/button\u003e\n    \u003cbutton class=\"bnd-btn bnd-reset\" type=\"button\"\u003eReset\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"bnd-workspace\"\u003e\n    \u003csection class=\"bnd-panel bnd-input-panel\"\u003e\n      \u003cdiv class=\"bnd-panel-head\"\u003e\n        \u003cdiv\u003e\n          \u003ch3\u003eBond assumptions\u003c\/h3\u003e\n          \u003cp\u003eValues update immediately. Choose the workflow that matches the bond's settlement timing.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cfieldset class=\"bnd-mode-fieldset\"\u003e\n        \u003clegend\u003eCalculation mode\u003c\/legend\u003e\n        \u003cdiv class=\"bnd-mode-switch\"\u003e\n          \u003cbutton class=\"bnd-mode-button\" type=\"button\" data-mode=\"coupon\" aria-pressed=\"true\"\u003eOn a coupon date\u003c\/button\u003e\n          \u003cbutton class=\"bnd-mode-button\" type=\"button\" data-mode=\"settlement\" aria-pressed=\"false\"\u003eBetween coupon dates\u003c\/button\u003e\n        \u003c\/div\u003e\n      \u003c\/fieldset\u003e\n\n      \u003cdiv class=\"bnd-coupon-inputs\" data-mode-panel=\"coupon\"\u003e\n        \u003cdiv class=\"bnd-form-grid\"\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-solve-for\"\u003eSolve for\u003c\/label\u003e\n            \u003cselect class=\"bnd-select\" id=\"bnd-solve-for\"\u003e\n              \u003coption value=\"price\"\u003eBond price\u003c\/option\u003e\n              \u003coption value=\"face\"\u003eFace value\u003c\/option\u003e\n              \u003coption value=\"yield\"\u003eYield to maturity\u003c\/option\u003e\n              \u003coption value=\"years\"\u003eTime to maturity\u003c\/option\u003e\n              \u003coption value=\"coupon\"\u003eAnnual coupon\u003c\/option\u003e\n            \u003c\/select\u003e\n            \u003cp class=\"bnd-help\"\u003eSelect the one unknown value; provide the other four.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"solveFor\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-price\"\u003ePrice\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-price\" type=\"text\" inputmode=\"decimal\" data-kind=\"currency\" value=\"\" disabled\u003e\n            \u003cp class=\"bnd-help\"\u003eMarket value paid for one bond.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"price\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-face\"\u003eFace value\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-face\" type=\"text\" inputmode=\"decimal\" data-kind=\"currency\" value=\"$100.00\"\u003e\n            \u003cp class=\"bnd-help\"\u003ePrincipal repaid at maturity.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"face\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-yield\"\u003eYield to maturity\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-yield\" type=\"text\" inputmode=\"decimal\" data-kind=\"percent\" value=\"6.00%\"\u003e\n            \u003cp class=\"bnd-help\"\u003eNominal annual discount rate.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"yield\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-years\"\u003eTime to maturity\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-years\" type=\"text\" inputmode=\"decimal\" data-kind=\"number\" value=\"3\"\u003e\n            \u003cp class=\"bnd-help\"\u003eRemaining years; must align with the payment frequency.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"years\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003cspan class=\"bnd-field-label\" id=\"bnd-coupon-unit-label\"\u003eCoupon input unit\u003c\/span\u003e\n            \u003cdiv class=\"bnd-segment\" role=\"group\" aria-labelledby=\"bnd-coupon-unit-label\"\u003e\n              \u003cbutton type=\"button\" data-unit-group=\"coupon\" data-unit=\"percent\" aria-pressed=\"true\"\u003ePercent\u003c\/button\u003e\n              \u003cbutton type=\"button\" data-unit-group=\"coupon\" data-unit=\"amount\" aria-pressed=\"false\"\u003eAnnual $\u003c\/button\u003e\n            \u003c\/div\u003e\n            \u003cp class=\"bnd-help\"\u003eSwitching units converts the current value.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"couponUnit\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-coupon\"\u003eAnnual coupon\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-coupon\" type=\"text\" inputmode=\"decimal\" data-kind=\"percent\" value=\"5.00%\"\u003e\n            \u003cp class=\"bnd-help\"\u003eAnnual interest as a rate of face value or a dollar amount.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"coupon\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-frequency\"\u003eCoupon frequency\u003c\/label\u003e\n            \u003cselect class=\"bnd-select\" id=\"bnd-frequency\"\u003e\n              \u003coption value=\"1\"\u003eAnnually\u003c\/option\u003e\n              \u003coption value=\"2\"\u003eSemiannually\u003c\/option\u003e\n              \u003coption value=\"4\"\u003eQuarterly\u003c\/option\u003e\n              \u003coption value=\"12\"\u003eMonthly\u003c\/option\u003e\n            \u003c\/select\u003e\n            \u003cp class=\"bnd-help\"\u003eNumber of coupon payments each year.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"frequency\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"bnd-settlement-inputs\" data-mode-panel=\"settlement\" hidden\u003e\n        \u003cdiv class=\"bnd-form-grid\"\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-set-face\"\u003eFace value\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-set-face\" type=\"text\" inputmode=\"decimal\" data-kind=\"currency\" value=\"$100.00\"\u003e\n            \u003cp class=\"bnd-help\"\u003ePrincipal repaid on the maturity date.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"setFace\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-set-yield\"\u003eYield to maturity\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-set-yield\" type=\"text\" inputmode=\"decimal\" data-kind=\"percent\" value=\"6.00%\"\u003e\n            \u003cp class=\"bnd-help\"\u003eNominal annual yield used to discount future payments.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"setYield\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003cspan class=\"bnd-field-label\" id=\"bnd-set-coupon-unit-label\"\u003eCoupon input unit\u003c\/span\u003e\n            \u003cdiv class=\"bnd-segment\" role=\"group\" aria-labelledby=\"bnd-set-coupon-unit-label\"\u003e\n              \u003cbutton type=\"button\" data-unit-group=\"setCoupon\" data-unit=\"percent\" aria-pressed=\"true\"\u003ePercent\u003c\/button\u003e\n              \u003cbutton type=\"button\" data-unit-group=\"setCoupon\" data-unit=\"amount\" aria-pressed=\"false\"\u003eAnnual $\u003c\/button\u003e\n            \u003c\/div\u003e\n            \u003cp class=\"bnd-help\"\u003eSwitching units converts the current value.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"setCouponUnit\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-set-coupon\"\u003eAnnual coupon\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-set-coupon\" type=\"text\" inputmode=\"decimal\" data-kind=\"percent\" value=\"5.00%\"\u003e\n            \u003cp class=\"bnd-help\"\u003eFixed annual coupon rate or annual cash amount.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"setCoupon\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-set-frequency\"\u003eCoupon frequency\u003c\/label\u003e\n            \u003cselect class=\"bnd-select\" id=\"bnd-set-frequency\"\u003e\n              \u003coption value=\"1\"\u003eAnnually\u003c\/option\u003e\n              \u003coption value=\"2\"\u003eSemiannually\u003c\/option\u003e\n              \u003coption value=\"4\"\u003eQuarterly\u003c\/option\u003e\n              \u003coption value=\"12\"\u003eMonthly\u003c\/option\u003e\n            \u003c\/select\u003e\n            \u003cp class=\"bnd-help\"\u003eCoupon dates are counted backward from maturity.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"setFrequency\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-maturity\"\u003eMaturity date\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-maturity\" type=\"date\" value=\"2029-01-01\"\u003e\n            \u003cp class=\"bnd-help\"\u003eDate of the final coupon and face-value repayment.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"maturity\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-settlement\"\u003eSettlement date\u003c\/label\u003e\n            \u003cinput class=\"bnd-input\" id=\"bnd-settlement\" type=\"date\" value=\"2026-01-04\"\u003e\n            \u003cp class=\"bnd-help\"\u003ePurchase date; it must be earlier than maturity.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"settlement\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"bnd-field\"\u003e\n            \u003clabel for=\"bnd-day-count\"\u003eDay-count convention\u003c\/label\u003e\n            \u003cselect class=\"bnd-select\" id=\"bnd-day-count\"\u003e\n              \u003coption value=\"30\/360\"\u003e30\/360\u003c\/option\u003e\n              \u003coption value=\"actual\/360\"\u003eActual\/360\u003c\/option\u003e\n              \u003coption value=\"actual\/365\"\u003eActual\/365\u003c\/option\u003e\n              \u003coption value=\"actual\/actual\"\u003eActual\/Actual\u003c\/option\u003e\n            \u003c\/select\u003e\n            \u003cp class=\"bnd-help\"\u003eControls accrued interest and fractional-period timing.\u003c\/p\u003e\n            \u003cp class=\"bnd-error\" data-error-for=\"dayCount\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"bnd-global-error\" role=\"alert\" hidden\u003e\u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003csection class=\"bnd-panel bnd-results-panel\"\u003e\n      \u003cdiv class=\"bnd-panel-head\"\u003e\n        \u003cdiv\u003e\n          \u003ch3\u003eLive results\u003c\/h3\u003e\n          \u003cp class=\"bnd-results-intro\"\u003ePresent value of coupons and principal at the selected yield.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"bnd-primary-result\" aria-live=\"polite\" aria-atomic=\"true\"\u003e\n        \u003cp class=\"bnd-primary-label\"\u003eBond price\u003c\/p\u003e\n        \u003cp class=\"bnd-primary-value\"\u003e$97.3270\u003c\/p\u003e\n        \u003cp class=\"bnd-primary-note\"\u003eThe bond is priced at a discount of $2.6730 to face value.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"bnd-result-grid\"\u003e\n        \u003cdiv class=\"bnd-result-card\"\u003e\n\u003cspan class=\"bnd-card-label-1\"\u003eCoupon per payment\u003c\/span\u003e\u003cstrong class=\"bnd-card-value-1\"\u003e$5.0000\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"bnd-result-card\"\u003e\n\u003cspan class=\"bnd-card-label-2\"\u003eCurrent yield\u003c\/span\u003e\u003cstrong class=\"bnd-card-value-2\"\u003e5.14%\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"bnd-result-card\"\u003e\n\u003cspan class=\"bnd-card-label-3\"\u003eModified duration\u003c\/span\u003e\u003cstrong class=\"bnd-card-value-3\"\u003e2.72 years\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"bnd-result-card\"\u003e\n\u003cspan class=\"bnd-card-label-4\"\u003eTotal cash flow\u003c\/span\u003e\u003cstrong class=\"bnd-card-value-4\"\u003e$115.00\u003c\/strong\u003e\n\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cul class=\"bnd-summary-list\" aria-label=\"Additional results\"\u003e\n        \u003cli\u003e\n\u003cspan class=\"bnd-summary-label-1\"\u003eFace value\u003c\/span\u003e\u003cstrong class=\"bnd-summary-value-1\"\u003e$100.00\u003c\/strong\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bnd-summary-label-2\"\u003eYield to maturity\u003c\/span\u003e\u003cstrong class=\"bnd-summary-value-2\"\u003e6.00%\u003c\/strong\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bnd-summary-label-3\"\u003eCoupon present value\u003c\/span\u003e\u003cstrong class=\"bnd-summary-value-3\"\u003e$13.3651\u003c\/strong\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan class=\"bnd-summary-label-4\"\u003ePrincipal present value\u003c\/span\u003e\u003cstrong class=\"bnd-summary-value-4\"\u003e$83.9619\u003c\/strong\u003e\n\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/section\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"bnd-breakdown bnd-chart-card\" data-chart-card=\"breakdown\"\u003e\n    \u003ch3\u003ePresent-value breakdown\u003c\/h3\u003e\n    \u003cp class=\"bnd-section-intro bnd-breakdown-intro\"\u003eSee how much of the bond's value comes from coupon income versus principal repayment.\u003c\/p\u003e\n    \u003cdiv class=\"bnd-chart-empty bnd-breakdown-empty\" hidden\u003eEnter valid values above to see the present-value breakdown.\u003c\/div\u003e\n    \u003cdiv class=\"bnd-chart-cluster bnd-breakdown-content\"\u003e\n      \u003cdiv class=\"bnd-chart-plot\"\u003e\n        \u003csvg class=\"bnd-donut-svg\" viewbox=\"0 0 280 280\" role=\"img\" aria-label=\"Present-value breakdown chart\"\u003e\u003c\/svg\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"bnd-chart-legend\" aria-label=\"Present-value breakdown legend\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"bnd-chart-summary-wrap bnd-breakdown-summary-wrap\"\u003e\n      \u003ctable class=\"bnd-table bnd-breakdown-summary\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eComponent\u003c\/th\u003e\n\u003cth\u003ePresent value\u003c\/th\u003e\n\u003cth\u003eShare\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n        \u003ctbody\u003e\u003c\/tbody\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"bnd-chart-callout bnd-breakdown-callout\"\u003eCoupon payments contribute 13.73% of the current bond value; principal contributes the remainder.\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"bnd-chart-card\" data-chart-card=\"cashflow\"\u003e\n    \u003ch3\u003eCash-flow profile\u003c\/h3\u003e\n    \u003cp class=\"bnd-section-intro\"\u003eCompare contractual cash flows with their discounted present values across the remaining payment periods.\u003c\/p\u003e\n    \u003cdiv class=\"bnd-chart-empty bnd-cashflow-empty\" hidden\u003eEnter valid values above to see the cash-flow profile.\u003c\/div\u003e\n    \u003cdiv class=\"bnd-cashflow-wrap bnd-cashflow-content\"\u003e\n      \u003cdiv class=\"bnd-chart-plot\"\u003e\u003csvg class=\"bnd-cashflow-svg\" viewbox=\"0 0 720 320\" role=\"img\" aria-label=\"Cash flow and present value bar chart\"\u003e\u003c\/svg\u003e\u003c\/div\u003e\n      \u003cdiv class=\"bnd-cashflow-legend bnd-chart-legend\" aria-label=\"Cash-flow chart legend\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"bnd-chart-summary-wrap\"\u003e\n        \u003ctable class=\"bnd-table bnd-cashflow-summary\"\u003e\n          \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003ePeriod range\u003c\/th\u003e\n\u003cth\u003eCash flow\u003c\/th\u003e\n\u003cth\u003ePresent value\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n          \u003ctbody\u003e\u003c\/tbody\u003e\n        \u003c\/table\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"bnd-chart-callout bnd-cashflow-callout\"\u003eLater payments are discounted more heavily, so their present values are lower than their contractual amounts.\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"bnd-table-card\"\u003e\n    \u003ch3\u003ePayment schedule\u003c\/h3\u003e\n    \u003cp class=\"bnd-section-intro\"\u003eEach row uses the same cash-flow model as the results, charts, and Excel workbook.\u003c\/p\u003e\n    \u003cdiv class=\"bnd-table-wrap\"\u003e\n      \u003ctable class=\"bnd-table bnd-schedule-table\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003ePeriod\u003c\/th\u003e\n\u003cth\u003ePayment date \/ year\u003c\/th\u003e\n\u003cth\u003eCoupon\u003c\/th\u003e\n\u003cth\u003ePrincipal\u003c\/th\u003e\n\u003cth\u003eTotal cash flow\u003c\/th\u003e\n\u003cth\u003eDiscount factor\u003c\/th\u003e\n\u003cth\u003ePresent value\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n        \u003ctbody\u003e\u003c\/tbody\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"bnd-table-note\"\u003eThe final row includes repayment of face value. Displayed figures are rounded, while calculations retain full precision.\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"bnd-education\"\u003e\n    \u003ch2\u003eHow to use this bond calculator\u003c\/h2\u003e\n    \u003cp\u003eThis calculator estimates the value of a conventional fixed-rate coupon bond. The first mode assumes valuation occurs exactly on a coupon payment date. It can solve for one unknown—price, face value, yield to maturity, years to maturity, or annual coupon—when the other four values are supplied. The second mode handles a trade between coupon dates and separates the quoted clean price from the dirty, or invoice, price that includes accrued interest.\u003c\/p\u003e\n\n    \u003ch3\u003eInputs for coupon-date valuation\u003c\/h3\u003e\n    \u003cul\u003e\n      \u003cli\u003e\n\u003cstrong\u003eSolve for:\u003c\/strong\u003e choose the single value you do not know. The selected field is calculated and disabled. The result is unique only when the remaining assumptions define a sensible fixed-rate bond.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003ePrice:\u003c\/strong\u003e the present market value of one bond. A price below face value is a discount; a price above face value is a premium. When solving for yield, a lower price generally implies a higher yield, all else equal.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eFace value:\u003c\/strong\u003e the principal repaid at maturity and the base used for percentage coupons. Common quote conventions use 100, while many individual bonds have a $1,000 denomination.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eYield to maturity:\u003c\/strong\u003e the nominal annual discount rate, divided by the coupon frequency for periodic discounting. It is not the same as the coupon rate or current yield. Raising the required yield normally lowers price.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eTime to maturity:\u003c\/strong\u003e the remaining years until principal repayment. The entered years must produce a whole number of payment periods for the selected frequency. Longer maturities usually increase interest-rate sensitivity.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eAnnual coupon:\u003c\/strong\u003e enter either a percentage of face value or the annual dollar amount. The unit switch converts the current value rather than merely changing its label. A higher coupon raises price when yield, maturity, and face value are unchanged.\u003c\/li\u003e\n      \u003cli\u003e\n\u003cstrong\u003eCoupon frequency:\u003c\/strong\u003e annual, semiannual, quarterly, or monthly. The calculator divides both the nominal annual yield and annual coupon by this frequency.\u003c\/li\u003e\n    \u003c\/ul\u003e\n\n    \u003ch3\u003eInputs for settlement between coupon dates\u003c\/h3\u003e\n    \u003cp\u003eEnter face value, yield, annual coupon, frequency, maturity date, and settlement date. Coupon dates are counted backward from maturity, so the maturity date should match the bond's actual coupon calendar. The settlement date must precede maturity. The day-count convention determines how the elapsed part of the coupon period is measured. Under 30\/360, months are standardized to 30 days. Actual\/360 and Actual\/365 use calendar days with fixed annual denominators. Actual\/Actual compares elapsed calendar days with the actual coupon period.\u003c\/p\u003e\n\n    \u003ch3\u003eWhat the results mean\u003c\/h3\u003e\n    \u003cp\u003e\u003cstrong\u003eBond price\u003c\/strong\u003e is the sum of the present values of all remaining coupons and principal. \u003cstrong\u003eCoupon per payment\u003c\/strong\u003e is the fixed cash interest paid each period. \u003cstrong\u003eCurrent yield\u003c\/strong\u003e divides annual coupon income by price; it ignores capital gain or loss at maturity. \u003cstrong\u003eModified duration\u003c\/strong\u003e approximates price sensitivity to a small change in yield. A modified duration of 2.7 suggests that a one-percentage-point rise in yield would produce roughly a 2.7% price decline, before convexity and other effects.\u003c\/p\u003e\n    \u003cp\u003eIn settlement mode, \u003cstrong\u003edirty price\u003c\/strong\u003e is the discounted value paid by the buyer. \u003cstrong\u003eAccrued interest\u003c\/strong\u003e compensates the seller for the fraction of the current coupon period already earned. \u003cstrong\u003eClean price\u003c\/strong\u003e equals dirty price minus accrued interest and is the quote commonly used for comparison. Accrued days and the accrual fraction show how the convention affected that adjustment.\u003c\/p\u003e\n\n    \u003ch3\u003eModel and formula\u003c\/h3\u003e\n    \u003cdiv class=\"bnd-formula\"\u003ePrice = Σ [coupon per period ÷ (1 + yield per period)\u003csup\u003et\u003c\/sup\u003e] + face value ÷ (1 + yield per period)\u003csup\u003eN\u003c\/sup\u003e\n\u003c\/div\u003e\n    \u003cp\u003eFor a coupon-date valuation, each payment occurs at a whole-number period. Between coupon dates, the first payment is discounted for a fractional period and later payments follow at regular intervals. When yield is zero, price is simply the sum of the remaining undiscounted cash flows. When the calculator solves for yield or maturity, it uses a numerical root search and checks that the requested value is mathematically identifiable.\u003c\/p\u003e\n\n    \u003ch3\u003eReading the charts and schedule\u003c\/h3\u003e\n    \u003cp\u003eThe present-value breakdown separates coupon value from principal value. A long, low-coupon bond often derives most of its value from the maturity payment, while a high-coupon bond allocates more value to interim income. The cash-flow chart groups long schedules into readable period ranges and compares contractual amounts with discounted values. The detailed table shows every payment, its discount factor, and its contribution to price; the final row includes principal repayment.\u003c\/p\u003e\n\n    \u003ch3\u003ePractical interpretation and limitations\u003c\/h3\u003e\n    \u003cp\u003eBond prices and yields move in opposite directions. Longer maturity and lower coupon generally increase sensitivity to changing market yields. Zero-coupon bonds have no interim coupon value, so their entire price comes from discounted principal. A price equal to face value usually occurs when coupon rate and yield are equal on a coupon date.\u003c\/p\u003e\n    \u003cp\u003eThis model assumes fixed promised payments, no default, no call or put feature, no taxes, no transaction costs, and reinvestment conditions consistent with the stated yield. Market price can also reflect liquidity, credit quality, embedded options, and supply and demand. For background on fixed-income risks and market conventions, consult the \u003ca href=\"https:\/\/www.investor.gov\/introduction-investing\/investing-basics\/investment-products\/bonds-or-fixed-income-products\/bonds\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSEC's investor bond overview\u003c\/a\u003e, \u003ca href=\"https:\/\/www.finra.org\/investors\/investing\/investment-products\/bonds\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eFINRA's bond resources\u003c\/a\u003e, and \u003ca href=\"https:\/\/www.treasurydirect.gov\/marketable-securities\/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTreasuryDirect's marketable securities guidance\u003c\/a\u003e. This calculator is educational and does not provide individualized investment advice.\u003c\/p\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e","brand":"FinancialModelsLab","offers":[{"title":"Default Title","offer_id":49909480030451,"sku":"bond-calculator","price":0.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6191\/2762\/files\/bond-calculator.webp?v=1783935362","url":"https:\/\/financialmodelslab.com\/products\/bond-calculator","provider":"Financial Models Lab","version":"1.0","type":"link"}