Time Value of Money and Interest Rates › Interest Rate Quotations
Quantitative FinanceAll chapters Time Value of Money and Interest Rates › Interest Rate QuotationsOne section · Sections in this chapter4 / 9 ↓
Reading tools Definitions & inline links
Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.
Article links
Make inline references clickable
Interest rates can be quoted using different compounding conventions. The same numerical quote can imply different effective costs or returns. For example, an 18% nominal annual rate capitalized monthly corresponds to a 19.56% EAR, not an 18% EAR. That comparison isolates compounding; actual credit-card charges also depend on contract terms and payments.
APR vs. Effective Annual Rate
For the compounding conversion below, APR denotes a nominal annual rate obtained by multiplying the periodic rate by the number of periods per year. If the monthly rate is 1.5%, this nominal rate is 12 × 1.5% = 18%. Statutory APR disclosures are product- and jurisdiction-specific: consumer-credit rules may incorporate specified finance charges, so a disclosed APR is not always just this nominal compounding label. The simplified conversion below isolates compounding and excludes fees.
The Effective Annual Rate (EAR) represents the one-year growth rate after accounting for compounding:
where:
- : effective annual rate (true annual return)
- : annual percentage rate (nominal/stated rate)
- : number of compounding periods per year
- : the growth factor over one year with compounding periods
The formula works by computing what $1 actually grows to over one year: the term is the growth factor, representing the final balance after one year per dollar invested. Here is a positive integer and the per-period growth factor must be admissible. For a positive APR and , EAR is strictly greater than APR because interest compounds within the year; at APR , they are equal.
The gap between EAR and the nominal rate grows with both the rate and the compounding frequency. At low rates or with annual compounding, the difference is small. At high rates with frequent compounding, the difference becomes significant. Disclosure terminology depends on the product and jurisdiction. In the United States, consumer-credit rules specify APR disclosures, while deposit-account rules specify an Annual Percentage Yield (APY). APY is a regulated deposit disclosure, not a universal synonym for the generic EAR used in the formula here.
The effective annual rate (EAR) is the actual annual return earned on an investment or paid on a loan after accounting for compounding. It allows meaningful comparison between rates with different compounding frequencies.
def apr_to_ear(apr, n):
"""Convert APR to EAR given n compounding periods per year."""
return np.expm1(n * np.log1p(apr / n))
# Illustrative nominal rate: 18% compounded monthly, excluding fees
apr = 0.18
n = 12
ear = apr_to_ear(apr, n)Illustrative nominal APR: 18.0% Compounding: Monthly (n=12) Effective Annual Rate: 19.56% Extra cost vs. stated rate: 1.56 percentage points
In this simplified example, an 18% nominal annual rate with monthly capitalization gives a 19.56% EAR. That is the one-year balance increase if there are no payments, new transactions, or fees. Actual credit-card charges depend on the contract's accrual rules, balances, payments, grace period, and fees; the CFPB's explanation describes daily accrual and the effect of payments.

Continuous Rate Conversions
In quantitative finance, we often need to convert between discrete and continuous rates. Quoting conventions vary by product, currency, and market, while continuous-time models often use continuously compounded rates for mathematical convenience. These conversions let us express economically equivalent growth factors under different conventions.
If is the nominal rate compounding times per year and is the equivalent continuous rate, they must produce the same terminal value over one year:
where:
- : annual growth factor under continuous compounding
- : continuously compounded rate
- : nominal rate compounding times per year
- : compounding frequency
- : annual growth factor under discrete compounding
This equation states that both rates must produce identical growth factors over one year. They are economically equivalent even though they are expressed differently. Solving for the continuous rate by taking the natural logarithm of both sides:
This formula converts a discretely compounded rate to its continuous equivalent. The logarithm "undoes" the exponential, extracting the continuous rate that achieves the same growth. And converting back by solving for the nominal rate:
This inverse formula takes a continuous rate and finds the discrete rate that produces identical growth. The exponential "undoes" the logarithm, and scaling by converts from a per-period rate back to an annual nominal rate.
For a positive compounding frequency , the comparison requires a valid discrete quote, . Because for , the equivalent rate satisfies , with equality only when . For a positive discrete quote, the continuous quote is numerically smaller; for a negative discrete quote, it is more negative. The size of the gap depends on the rate and compounding frequency, so quote conventions must be compared on an equivalent basis rather than by the stated numbers alone.
import numpy as np
def discrete_to_continuous(r_discrete, n):
"""Convert discrete rate (n compounds/year) to continuous rate."""
return n * np.log1p(r_discrete / n)
def continuous_to_discrete(r_continuous, n):
"""Convert continuous rate to discrete rate (n compounds/year)."""
return n * np.expm1(r_continuous / n)
# Example: 5% annual rate
r_annual = 0.05
r_continuous = discrete_to_continuous(r_annual, 1)
r_back = continuous_to_discrete(r_continuous, 1)Annual discrete rate: 5.0000% Equivalent continuous: 4.8790% Converted back: 5.0000%
For this positive rate, the continuous quote is slightly lower than the annual discrete quote while producing the same one-year growth. When a quoted rate and a model input use different compounding conventions, conversion places them on an equivalent-growth basis before the rate enters the formula.
Day Count Conventions
Real-world interest calculations must handle fractional years. When interest accrues between two dates that do not span exact years, we need a rule for converting calendar days into a fraction of a year. Different markets use different day count conventions to determine this fraction, and the choice of convention can affect calculated interest amounts, especially for large notional values.
Named convention families contain variants, so a contract must identify the exact rule. Common labels include:
- Actual/365 Fixed: Days between dates divided by 365
- Actual/360: Days between dates divided by 360 (common for money markets)
- 30/360 family: Uses convention-specific adjustments to represent 30-day months and a 360-day year; variants include 30U/360 and 30E/360
- Actual/Actual family: Uses actual calendar days, with variants such as Actual/Actual ICMA and Actual/Actual ISDA
For a positive elapsed interval, Actual/360 produces a larger year fraction than Actual/365 Fixed. With the same positive principal and positive nominal rate, this gives a larger stated simple-interest accrual. At a negative rate, the algebraic accrual ordering reverses. Commercial pricing can offset the difference, so the convention alone does not guarantee an economic benefit to either party. Actual/Actual is calendar-sensitive rather than inherently "more accurate"; the correct calculation is the contractual variant. The code below is a simplified illustration and does not implement every end-of-month or February rule used by named 30/360 variants.
from datetime import date
def year_fraction(start_date, end_date, convention="actual/365"):
"""Calculate year fraction between two dates."""
days = (end_date - start_date).days
if convention == "actual/365":
return days / 365
elif convention == "actual/360":
return days / 360
elif (
convention == "30/360"
): # Simplified illustration, not a named contractual variant
d1 = min(start_date.day, 30)
d2 = min(end_date.day, 30) if d1 == 30 else end_date.day
months = (end_date.year - start_date.year) * 12 + (
end_date.month - start_date.month
)
return (months * 30 + (d2 - d1)) / 360
else:
raise ValueError(f"Unknown convention: {convention}")
# Example: 6-month period
start = date(2024, 1, 15)
end = date(2024, 7, 15)
fractions = {}
for conv in ["actual/365", "actual/360", "30/360"]:
fractions[conv] = year_fraction(start, end, conv)Period: 2024-01-15 to 2024-07-15 Actual days: 182 Convention Year Fraction -------------------------------- actual/365 0.498630 actual/360 0.505556 30/360 0.500000
The same 6-month period produces different year fractions depending on the convention. These differences compound in interest calculations, particularly for large notional amounts. Always verify which convention applies to your specific market and instrument.