Floating Rate Note (FRN) Calculator
.frn-calculator-container {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background: #ffffff;
border: 1px solid #e0e0e0;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
}
.frn-calc-header {
text-align: center;
margin-bottom: 30px;
background: #f8f9fa;
padding: 15px;
border-radius: 6px;
}
.frn-calc-header h2 {
margin: 0;
color: #2c3e50;
}
.frn-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30px;
}
@media (max-width: 768px) {
.frn-grid {
grid-template-columns: 1fr;
}
}
.frn-input-group {
margin-bottom: 20px;
}
.frn-input-group label {
display: block;
margin-bottom: 8px;
font-weight: 600;
color: #4a5568;
font-size: 0.95rem;
}
.frn-input-group input, .frn-input-group select {
width: 100%;
padding: 12px;
border: 1px solid #cbd5e0;
border-radius: 6px;
font-size: 1rem;
transition: border-color 0.2s;
box-sizing: border-box;
}
.frn-input-group input:focus, .frn-input-group select:focus {
border-color: #3182ce;
outline: none;
box-shadow: 0 0 0 3px rgba(49, 130, 206, 0.1);
}
.frn-input-help {
font-size: 0.8rem;
color: #718096;
margin-top: 4px;
}
.frn-btn {
width: 100%;
padding: 14px;
background-color: #3182ce;
color: white;
border: none;
border-radius: 6px;
font-size: 1.1rem;
font-weight: 600;
cursor: pointer;
transition: background-color 0.2s;
}
.frn-btn:hover {
background-color: #2b6cb0;
}
.frn-results {
background-color: #ebf8ff;
border: 1px solid #bee3f8;
border-radius: 8px;
padding: 25px;
text-align: center;
display: none; /* Hidden by default */
}
.frn-results.active {
display: block;
animation: fadeIn 0.5s;
}
.frn-result-item {
margin-bottom: 20px;
border-bottom: 1px solid #bee3f8;
padding-bottom: 15px;
}
.frn-result-item:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.frn-result-label {
color: #4a5568;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 5px;
}
.frn-result-value {
color: #2c3e50;
font-size: 1.8rem;
font-weight: 700;
}
.frn-result-sub {
font-size: 0.9rem;
color: #718096;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.frn-error {
color: #e53e3e;
font-size: 0.9rem;
margin-top: 10px;
text-align: center;
display: none;
}
.frn-content {
margin-top: 50px;
line-height: 1.6;
color: #2d3748;
}
.frn-content h2 {
color: #2c3e50;
border-bottom: 2px solid #edf2f7;
padding-bottom: 10px;
margin-top: 40px;
}
.frn-content h3 {
color: #4a5568;
margin-top: 25px;
}
.frn-content p {
margin-bottom: 15px;
}
.frn-content ul {
margin-bottom: 20px;
padding-left: 20px;
}
.frn-content li {
margin-bottom: 8px;
}
.frn-table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
.frn-table th, .frn-table td {
border: 1px solid #e2e8f0;
padding: 12px;
text-align: left;
}
.frn-table th {
background-color: #f7fafc;
font-weight: 600;
}
Total Annualized Coupon Rate
0.00%
Reference Rate + Spread
Next Payment Amount
$0.00
Cash received for the current period
Total Annual Income
$0.00
Projected income if rate remains constant
function calculateFRN() {
// 1. Get input values
var parValueInput = document.getElementById('parValue').value;
var referenceRateInput = document.getElementById('referenceRate').value;
var spreadBpsInput = document.getElementById('spreadBps').value;
var frequencySelect = document.getElementById('paymentFrequency');
var parValue = parseFloat(parValueInput);
var refRate = parseFloat(referenceRateInput);
var spreadBps = parseFloat(spreadBpsInput);
var frequency = parseInt(frequencySelect.value);
var errorDiv = document.getElementById('frnError');
var resultsDiv = document.getElementById('frnResults');
// 2. Validate Inputs
if (isNaN(parValue) || isNaN(refRate) || isNaN(spreadBps) || parValue <= 0 || refRate < 0 || spreadBps < 0) {
errorDiv.style.display = 'block';
resultsDiv.classList.remove('active');
return;
}
errorDiv.style.display = 'none';
// 3. Perform Calculations
// Convert Basis Points to Percentage (1 bps = 0.01%)
var spreadPercent = spreadBps / 100;
// Calculate Total Coupon Rate (Annualized)
var totalRatePercent = refRate + spreadPercent;
// Calculate Annual Income Amount
var annualIncome = parValue * (totalRatePercent / 100);
// Calculate Payment Per Period (Simple Interest assumption for coupon payments)
// Standard FRN logic: Annual Rate / Frequency * Par Value
var paymentPerPeriod = annualIncome / frequency;
// 4. Update UI
document.getElementById('resTotalRate').innerText = totalRatePercent.toFixed(3) + '%';
// Format currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
});
document.getElementById('resNextPayment').innerText = formatter.format(paymentPerPeriod);
document.getElementById('resAnnualIncome').innerText = formatter.format(annualIncome);
// Show Results
resultsDiv.classList.add('active');
}
Understanding Floating Rate Notes (FRNs)
A Floating Rate Note (FRN), also known as a "floater," is a debt instrument with a variable interest rate. Unlike fixed-rate bonds where the coupon remains constant, the interest payment on an FRN fluctuates over time. The rate is typically tied to a benchmark index (such as SOFR, EURIBOR, or the Fed Funds Rate) plus a fixed spread.
How to Calculate FRN Coupons
The calculation of a Floating Rate Note coupon involves three primary components:
- Reference Rate: The underlying benchmark index (e.g., 3-Month SOFR). This changes based on market conditions.
- Spread (Margin): A fixed percentage added to the reference rate. This represents the credit risk premium of the issuer. It is often quoted in Basis Points (bps).
- Payment Frequency: How often the interest rate resets and payments are made (usually quarterly).
Formula:
Total Coupon Rate = Reference Rate + (Spread in bps / 100)
Payment Amount = Par Value × (Total Coupon Rate / Payment Frequency)
Example Calculation
Let's assume an investor holds an FRN with the following details:
| Parameter |
Value |
| Par Value (Principal) |
$100,000 |
| Reference Rate (e.g., SOFR) |
4.50% |
| Spread |
150 Basis Points (1.50%) |
| Frequency |
Quarterly (4 times/year) |
Step 1: Determine Total Rate
4.50% (Ref) + 1.50% (Spread) = 6.00% Annualized
Step 2: Calculate Period Payment
$100,000 × (6.00% / 4) = $1,500 per quarter.
Why Invest in Floating Rate Notes?
FRNs are particularly attractive in rising interest rate environments. Because the coupon resets periodically (usually every 3 months), the bond's duration is very short (effective duration is close to zero). This means the price of the bond is much less sensitive to interest rate hikes compared to fixed-rate bonds.
- Protection Against Rate Hikes: If the central bank raises rates, the reference rate increases, and your coupon payment goes up.
- Capital Preservation: Because the coupon adjusts to market rates, the price of the bond tends to stay close to Par (100).
- Lower Volatility: FRNs generally exhibit less price volatility than long-term fixed-rate treasuries or corporate bonds.
Understanding Basis Points (bps)
In the bond market, spreads are almost always quoted in basis points. It is crucial to convert these correctly when calculating your return:
- 1 Basis Point = 0.01%
- 10 Basis Points = 0.10%
- 100 Basis Points = 1.00%
If a bond quotes "SOFR + 125bps", and SOFR is 3.00%, the total yield is 3.00% + 1.25% = 4.25%.