Financial functions

INTRATE

Matches all 2,446 recorded answers

Recorded: 2,400 in the answer bank and 46 workbook cells. How we measure this · See the Rust code

Local names in 40 languages
LanguageName in Excel
ArabicINTRATE
BulgarianINTRATE
CzechINTRATE
DanishRENTEFOD
GermanINTRATE
GreekINTRATE
English (Australia)INTRATE
English (United Kingdom)INTRATE
English (United States)INTRATE
SpanishTASA.INT
EstonianINTRATE
FinnishKORKO.ARVOPAPERI
FrenchTAUX.INTERET
HebrewINTRATE
CroatianINTRATE
HungarianKAMATRÁTA
IndonesianINTRATE
ItalianINTRATE
JapaneseINTRATE
KoreanINTRATE
LithuanianINTRATE
LatvianINTRATE
NorwegianRENTESATS
DutchRENTEPERCENTAGE
PolishSTOPA.PROC
Portuguese (Brazil)INTRATE
Portuguese (Portugal)TAXAJUROS
RomanianINTRATE
RussianИНОРМА
SlovakINTRATE
SlovenianINTRATE
Serbian (Latin)INTRATE
SwedishÅRSRÄNTA
ThaiINTRATE
TurkishFAİZORANI işlevi
UkrainianINTRATE
VietnameseINTRATE
Chinese (Simplified)INTRATE
Chinese (Hong Kong)INTRATE
Chinese (Traditional)INTRATE

Names from Microsoft's support site.

What it does

INTRATE(settlement, maturity, investment, redemption, [basis])

INTRATE(settlement, maturity, investment, redemption, [basis]) returns the simple annualized interest rate for a fully invested security — one that pays nothing until maturity, when it pays redemption against an outlay of investment.

With T the year fraction from settlement to maturity under the chosen day-count basis:

INTRATE = (redemption − investment) / investment × 1/T

In Microsoft's notation, with B the basis year length in days and DIM the number of days from settlement to maturity, T = DIM/B and

INTRATE = (redemption − investment) / investment × B / DIM

"Fully invested" is the definitional constraint, and it means exactly one thing: there are no intermediate cash flows. Every coupon-bearing instrument is outside this function's model, and INTRATE will still return a number if you feed it one — a wrong number, computed correctly.

The rate is simple, not compounded. Over a span longer than a year, INTRATE returns the total gain divided by the number of years, with no reinvestment of interest at all. It is not comparable to an EFFECT-style annual equivalent and it is not RRI.

The pair with DISC

INTRATE and DISC describe the same trade and disagree about the denominator:

NumeratorDenominator
INTRATEredemption − investmentinvestment — what you paid
DISCredemption − prredemption — what you get back

Since redemption > investment for any security bought at a discount, INTRATE > DISC always, and the gap widens with T. The exact conversions:

INTRATE = DISC / (1 − DISC·T)
DISC    = INTRATE / (1 + INTRATE·T)

Confusing the two is the classic money-market quotation error. It is not a small error: on a one-year instrument at a 10% discount rate the investment-side rate is about 11.1%.

Arguments

ArgumentMeaningDefault
settlementThe settlement date — when the security trades to the buyer. Required.—
maturityThe maturity date — when the security expires. Required.—
investmentThe amount invested in the security. Required.—
redemptionThe amount to be received at maturity. Required.—
basisThe day-count basis. Optional.0

Note the argument-shape asymmetry with DISC, and it is easy to miss: DISC takes a price per $100 face value, while INTRATE takes an amount invested. Because both functions use their two money arguments only as a ratio, either scaling gives the same answer provided both money arguments use the same one — but the documented meanings differ, and a formula that feeds a per-100 price to INTRATE alongside a raw redemption amount is silently wrong by four orders of magnitude.

The documented day-count basis values are the standard five, identical to the table on the DISC page: 0 or omitted = US (NASD) 30/360, 1 = Actual/actual, 2 = Actual/360, 3 = Actual/365, 4 = European 30/360. Dates and basis are documented as truncated to integers.

Numeric coercion of the argument slots follows the shared call model; see Coercion and lifting.

Try it

Input cells (optional)

Example: {"B2": 3, "B3": 4}. A1 holds the formula. Other cells need values before a formula can read them.

Enter a formula, then calculate.

Runs locally in your browser with OneCalc. Its answer may differ from Excel. Use English function names and commas between arguments.

Quirks

Result and edge cases

Returns Number — an annualized rate as a decimal fraction.

  • redemption < investment is admissible and yields a negative rate. There is no guard against a loss-making trade.
  • settlement ≥ maturity is a domain error rather than a sign flip.
  • Short spans amplify. As T → 0 the rate diverges; a one-day instrument at a hundredth of a percent gain annualizes to a large number, and that is the arithmetic working, not failing.
  • Non-integer basis is truncated toward zero before the range check.
  • Empty, missing and error arguments follow the shared call model; see The value universe.

Errors

As documented on Microsoft's INTRATE page:

ErrorCondition
#VALUE!settlement or maturity is not a valid serial date number
#NUM!investment ≤ 0 or redemption ≤ 0
#NUM!basis < 0 or basis > 4
#NUM!settlement ≥ maturity

The discount-security functions run a fixed formula order on the x87 unit

With B the year basis and D the day count, Excel evaluates DISC = (1 - pr/red) * (B/D); INTRATE = ((red - inv)/inv) * (B/D); RECEIVED = inv / (1 - (disc*D)/B); PRICEDISC = red - ((disc*red)*D)/B; TBILLYIELD = ((100 - pr)/pr) * (360/D), each + - * / taken from the x87 unit at precision 64 and stored to binary64. Results can sit several units from the exact value: the DISC row below is 5 units below it.

FormulaExcelMathematical value
DISC(37655, 38261, 94.87631295104353, 102.73579504052532, 3)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 37655
0x40e262e000000000

maturity: 38261
0x40e2aea000000000

pr: 94.87631295104353
0x4057b81582ea72c4

redemption: 102.73579504052532
0x4059af174414e760

basis: 3
0x4008000000000000

Exact rational value of the same formula from the binary64 inputs, correctly rounded.

0.046077868684136686
0x3fa79784b622b014
0.04607786868413672
0x3fa79784b622b019
TBILLYIELD(47701, 47702, 2.279784366464575)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 47701
0x40e74aa000000000

maturity: 47702
0x40e74ac000000000

pr: 2.279784366464575
0x40023cff95ff2def

Exact rational value of the same formula from the binary64 inputs, correctly rounded.

15430.96713248709
0x40ce237bcaff517a
15430.967132487087
0x40ce237bcaff5178
INTRATE(58548, 58599, 428532.13421818457, 6.805737049418593, 0)
Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H
Inputs and reference value

Number supplied through a cell.

settlement: 58548
0x40ec968000000000

maturity: 58599
0x40ec9ce000000000

investment: 428532.13421818457
0x411a27d089707de5

redemption: 6.805737049418593
0x401b39132211b6ad

basis: 0
0x0000000000000000

-7.199885653133469
0xc01cccaed31c9766
—

Inputs, build details and evidence

On basis 1 the fictitious 1900-02-29 is not a leap day, and YEARFRAC takes serial 0 as a date

Excel's calendar holds a 29 February 1900, serial 60, that never existed. On basis 1 (actual/actual) it does not make 1900 a leap year: YEARFRAC(59,60,1) is 1/365, where the real 1904-02-29 gives YEARFRAC(1520,1521,1) = 1/366. Serial 0 is accepted as a date: YEARFRAC(0,5,0) is 5/360 and YEARFRAC(0,60,1) is 60/365. Reversed dates give the same answer as in order. ACCRINTM, DISC, INTRATE, PRICEDISC and RECEIVED take the same 365 and 366 on those dates: DISC(59,60,99,100,1) is about 3.65 and DISC(1520,1521,99,100,1) about 3.66.

FormulaExcelMathematical value
YEARFRAC(59, 60, 1)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

start_date: 59
0x404d800000000000

end_date: 60
0x404e000000000000

basis: 1
0x3ff0000000000000

0.0027397260273972603
0x3f66719f3601671a
—
YEARFRAC(1520, 1521, 1)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

start_date: 1520
0x4097c00000000000

end_date: 1521
0x4097c40000000000

basis: 1
0x3ff0000000000000

0.00273224043715847
0x3f6661ec6a5122f9
—
YEARFRAC(0, 5, 0)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

start_date: 0
0x0000000000000000

end_date: 5
0x4014000000000000

basis: 0
0x0000000000000000

0.013888888888888888
0x3f8c71c71c71c71c
—
YEARFRAC(0, 60, 1)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

start_date: 0
0x0000000000000000

end_date: 60
0x404e000000000000

basis: 1
0x3ff0000000000000

0.1643835616438356
0x3fc50a8542a150a8
—
DISC(59, 60, 99, 100, 1)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

settlement: 59
0x404d800000000000

maturity: 60
0x404e000000000000

pr: 99
0x4058c00000000000

redemption: 100
0x4059000000000000

basis: 1
0x3ff0000000000000

3.650000000000003
0x400d33333333333a
—
DISC(1520, 1521, 99, 100, 1)
Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file
Inputs and reference value

Number supplied through a cell.

settlement: 1520
0x4097c00000000000

maturity: 1521
0x4097c40000000000

pr: 99
0x4058c00000000000

redemption: 100
0x4059000000000000

basis: 1
0x3ff0000000000000

3.6600000000000033
0x400d47ae147ae14f
—

Inputs, build details and evidence

How to implement

Numerical notes

The arithmetic is one subtraction, two divisions and a multiplication. All of the interesting behaviour is in T and in one cancellation site.

Cancellation in redemption − investment. For a short-dated instrument the two amounts agree to many significant figures, so the difference loses precision exactly where 1/T is largest. The relative error of the result is the relative error of the difference multiplied by nothing at all — the 1/T factor scales both the value and its error — but the absolute error in the rate grows with 1/T, which is what a reader comparing two nearly identical short-dated quotes will notice. There is no rearrangement that avoids this; the information is genuinely in the last few digits of the two inputs.

Rust code

Show the CalcFunc source of this function

Quoted from the public repository DnaCalc/DnaCalc, crates calc-func and calc-fml, at commit 9e1884369a67. Comments are the source's own. A kernel shared with other functions appears once, on its module page.

INTRATE · 4 lines · calc-func/src/catalogue/bonds.rs on GitHub
17 intrate_fn "INTRATE" (4, 5) [V "settlement", V "maturity", V "investment", V "redemption", V "basis"] |s, a, sv| {
    let (settlement, maturity) = (date_1900(s, a, 0, sv)?, date_1900(s, a, 1, sv)?);
    bill_out(s, bill::intrate_kernel(settlement, maturity, num(s, a, 2)?, num(s, a, 3)?, basis(s, a, 4)?))
}
intrate_kernel · 24 lines · calc-func/src/ported/discount_bill_yearfrac_family.rs on GitHub
pub fn intrate_kernel(
    settlement: f64,
    maturity: f64,
    investment: f64,
    redemption: f64,
    basis: Option<f64>,
) -> Result<f64, DiscountBillYearfracEvalError> {
    if !investment.is_finite() || !redemption.is_finite() {
        return Err(DiscountBillYearfracEvalError::Domain(
            WorksheetErrorCode::Value,
        ));
    }
    if investment <= 0.0 || redemption <= 0.0 {
        return Err(DiscountBillYearfracEvalError::Domain(
            WorksheetErrorCode::Num,
        ));
    }
    // Excel: ((redemption - investment)/investment)*(B/D) (dc-j9k: 40 of 40 readings; dividing
    // by the fraction D/B matched 28).
    let (days, year) = security_days_and_year(settlement, maturity, basis)?;
    let spread = excel_x87_sub(redemption, investment);
    let ratio = excel_x87_div(spread, investment);
    Ok(excel_x87_mul(ratio, excel_x87_div(year, days)))
}

Kernels shared with other functions

Argument and result plumbing

  • fail catalogue/kit
  • num catalogue/kit

No implementation has been published with a Handbook test suite for this function.

Version differences

The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.

Excel 16.0 buildPlatform and CPUCaptured inputs
20430Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics2,400

The record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.

Recorded environments and comparison details.

Excel 16.0 build 20430

Windows 64-bit, AMD Ryzen 7 4800H

INTRATE(58548, 58599, 428532.13421818457, 6.805737049418593, 0) returned -7.199885653133469 (0xc01cccaed31c9766). Inputs were supplied through cells using Value2. These are controls from this environment, not a same-input comparison with another build.

Observed formulas and results
  • INTRATE(58548, 58599, 428532.13421818457, 6.805737049418593, 0) → -7.199885653133469
    0xc01cccaed31c9766 (cell-value2)

Excel 16.0 build 20430

Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics

2,400 captured inputs are indexed for this environment. Capture dates: 2026-09-25 to 2026-09-25. This is a reading count, not a comparison with another build.

Alternatives

Relationships

  • DISC — the redemption-side quotation of the same instrument, with the exact conversion above. Read the two pages together.
  • RECEIVED — what comes back at maturity for a given investment, but it takes a discount rate, not INTRATE's rate, so RECEIVED(…, INTRATE(…)) does not reproduce the redemption. Convert first with d = r / (1 + r × T), or compute investment × (1 + r × T).
  • YIELDMAT — for a security that pays interest at maturity but accrues from an issue date, which INTRATE does not model. If your instrument has an issue date distinct from settlement, INTRATE is the wrong function.
  • TBILLEQ — the bond-equivalent yield of a Treasury bill: the same idea of restating a discount quotation on the investment side, wired to the T-bill conventions.
  • RRI — the compound rate that takes a present value to a future value over n periods. INTRATE is the simple-interest answer to a superficially similar question, and the two diverge as soon as the horizon exceeds a year.
  • YEARFRAC — the day-count machinery, exposed directly; the fastest way to isolate whether a surprising INTRATE result comes from the calendar or from the amounts.

Named variants

No named variants are recorded yet.

Suggest a correction or contribute an implementation · For agents