Financial functions

ACCRINTM

Matches all 3,615 recorded answers

Recorded: 3,612 in the answer bank and 3 workbook cells. How we measure this · See the Rust code

Local names in 40 languages
LanguageName in Excel
ArabicACCRINTM
BulgarianACCRINTM
CzechACCRINTM
DanishACCRINTM
GermanAUFGELZINSF
GreekACCRINTM
English (Australia)ACCRINTM
English (United Kingdom)ACCRINTM
English (United States)ACCRINTM
SpanishINT.ACUM.V
EstonianACCRINTM
FinnishKERTYNYT.KORKO.LOPUSSA
FrenchACCRINTM
HebrewACCRINTM
CroatianACCRINTM
HungarianLEJÁRATI.KAMAT
IndonesianACCRINTM
ItalianACCRINTM
JapaneseACCRINTM
KoreanACCRINTM
LithuanianACCRINTM
LatvianACCRINTM
NorwegianACCRINTM
DutchSAMENG.RENTE.V
PolishNAL.ODS.WYKUP
Portuguese (Brazil)ACCRINTM
Portuguese (Portugal)JUROSACUMV
RomanianACCRINTM
RussianНАКОПДОХОДПОГАШ
SlovakACCRINTM
SlovenianACCRINTM
Serbian (Latin)ACCRINTM
SwedishUPPLOBLRÄNTA
ThaiACCRINTM
TurkishGERÇEKFAİZV işlevi
UkrainianACCRINTM
VietnameseACCRINTM
Chinese (Simplified)ACCRINTM
Chinese (Hong Kong)ACCRINTM
Chinese (Traditional)ACCRINTM

Names from Microsoft's support site.

What it does

ACCRINTM(issue, settlement, rate, [par], [basis])

ACCRINTM returns the accrued interest on a security that pays all its interest at maturity. There are no coupons in between, so there is no schedule to reconstruct: the whole computation is one interval measured once.

Microsoft's Learn reference states the shape of the equation directly — "A = Number of accrued days counted according to a monthly basis", "D = Annual Year Basis", and "For interest at maturity items, the number of days from the issue date to the maturity date is used". Writing that out:

ACCRINTM = par × rate × (A / D)

So the mathematics is a single product of three numbers, and all of the difficulty is in the year fraction. The basis argument is not a detail on this page; it is the page.

basisConventionNumerator ADenominator D
0 or omittedUS (NASD) 30/36030/360-adjusted day count360
1Actual/actualactual calendar daysactual — depends on the years spanned
2Actual/360actual calendar days360
3Actual/365actual calendar days365
4European 30/36030/360-adjusted day count360

That table is Microsoft's, verbatim from the Learn page. The basis-1 construction — what "actual year" means when the interval spans a year boundary or a leap day — is not specified there, and is the same unsettled question described at length on YEARFRAC. For an at-maturity instrument this matters more than usual, because the interval is typically long: a bill with a two-year term crosses at least one year boundary by construction.

One naming trap

The second argument is called settlement on the worksheet, and Microsoft's own Learn page describes it as "the security's maturity date". For an at-maturity security these are the same date in normal use — the interest stops accruing when the paper matures — but the argument name and the argument description do not agree, and code written against the name alone will pass the wrong date on any early-settlement scenario. The Handbook records the naming discrepancy; it does not resolve which reading Excel implements.

Arguments

ACCRINTM(issue, settlement, rate, [par], [basis])

rate is annual. Unlike ACCRINT there is no frequency to divide it by, so an annual rate goes in unmodified and the year fraction does all the scaling.

par scales the answer linearly, which is why a wrong par produces a plausible-looking wrong number rather than an obviously broken one.

Microsoft documents that "Issue, maturity, and basis are truncated to integers", and carries the standard warning that dates should come from DATE or from other formulas rather than being typed as text. Numeric slots otherwise follow the shared model in 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 a Number: an amount of currency in the units of par.

  • Long intervals under basis 1 are where the unspecified actual/actual construction becomes visible; two defensible constructions differ by a fraction of a day per year spanned.
  • Fractional date serials contribute no fractional days, per the documented truncation rule.
  • Empty, missing and error arguments follow the shared call model; see The value universe.

Errors

Microsoft's Learn page documents four conditions, in these words (it says "will generate an error" without naming a worksheet error value):

Condition (documented)Documented outcome
issue or maturity is not a valid dateerror
rate = 0, or par = 0error
basis < 0 or basis > 4error
issue = maturityerror

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

  1. There is nothing to lose precision in. Three finite numbers are multiplied; the only rounding is in A/D and in the two products. The interesting engineering question is not accuracy but op order: par × rate × (A/D) and par × (rate × A) / D differ in the last bit, and an implementation targeting Excel compatibility must pin which one it forms.
  2. D is a small integer in three of five cases, so A/D is a quotient of small integers by 360 or 365 — inexact in binary, and therefore genuinely last-bit-sensitive.
  3. Basis 1 needs a written specification before it needs code. Which years contribute, how leap days are counted, and what happens across multi-year intervals are all choices, and the documentation makes none of them.
  4. Truncate all three integer-valued arguments first, per the documented rule, before any arithmetic — including basis.

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.

ACCRINTM · 4 lines · calc-func/src/catalogue/bonds.rs on GitHub
9 accrintm_fn "ACCRINTM" (3, 5) [V "issue", V "settlement", V "rate", V "par", V "basis"] |s, a, sv| {
    let (issue, settlement) = (date_1900(s, a, 0, sv)?, date_1900(s, a, 1, sv)?);
    bond_out(s, bond::accrintm_kernel(issue, settlement, num(s, a, 2)?, Some(or(s, a, 3, 1000.0)?), Some(or(s, a, 4, 0.0)?)))
}
yf · 12 lines · calc-func/src/ported/bond_core_family.rs on GitHub
fn yf(s: i64, e: i64, b: DayCountBasis) -> Result<f64, BondCoreEvalError> {
    match b {
        DayCountBasis::Us30_360 => Ok(d360us(s, e)? / 360.0),
        // Excel's actual/actual rule, shared with YEARFRAC basis 1 (W111-5 G8-06).
        DayCountBasis::ActualActual => {
            crate::ported::day_count_common::excel_actual_actual_fraction(s, e).map_err(derr)
        }
        DayCountBasis::Actual360 => Ok(act(s, e) / 360.0),
        DayCountBasis::Actual365 => Ok(act(s, e) / 365.0),
        DayCountBasis::European30_360 => Ok(d360eu(s, e)? / 360.0),
    }
}
accrintm_kernel · 19 lines · calc-func/src/ported/bond_core_family.rs on GitHub
pub fn accrintm_kernel(
    issue: f64,
    settlement: f64,
    rate_: f64,
    par: Option<f64>,
    basis_: Option<f64>,
) -> Result<f64, BondCoreEvalError> {
    let issue = dser(issue)?;
    let settlement = dser(settlement)?;
    // ACCRINTM needs a strictly positive rate (rate 0 is #NUM!), and equal issue and
    // settlement dates accrue 0 rather than #NUM! (live Excel 20430, W111-5 G8-06).
    let rate_ = pos(rate_)?;
    let par = pos(par.unwrap_or(1000.0))?;
    let basis_ = basis(basis_.unwrap_or(0.0))?;
    if issue > settlement {
        return Err(derr(WorksheetErrorCode::Num));
    }
    Ok(par * rate_ * yf(issue, settlement, basis_)?)
}

Kernels shared with other functions

Argument and result plumbing

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,406

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 with Radeon Graphics

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

Alternatives

Relationships

  • ACCRINT — the periodic-coupon counterpart. It needs frequency and calc_method because it must reconstruct a coupon schedule; this function needs neither. The two agree only in the degenerate case where the whole interval is one coupon period.
  • YEARFRAC — the day-count engine. ACCRINTM(i, s, r, p, b) should be p × r × YEARFRAC(i, s, b), and testing that identity is the cheapest way to localize a disagreement to one of the two functions.
  • INTRATE, RECEIVED, DISC — the discount-instrument family, which measures time the same way but quotes the result as a rate rather than an amount.
  • Confused with: ACCRINT (above), and with ISPMT-style simple-interest arithmetic, which uses a period count rather than a day-count basis.

Named variants

No named variants are recorded yet.

Suggest a correction or contribute an implementation · For agents