Financial functions

IPMT

Known larger differences on 74 of 261 recorded answers

Of 261 recorded answers (57 in the answer bank and 204 workbook cells), 74 do not match: 11 differ by more than 16 ULP, 61 differ by at most 16 ULP, 2 differ in kind or value. How we measure this · See the Rust code

Local names in 40 languages
LanguageName in Excel
ArabicIPMT
BulgarianIPMT
CzechPLATBA.ÚROK
DanishR.YDELSE
GermanZINSZ
GreekIPMT
English (Australia)IPMT
English (United Kingdom)IPMT
English (United States)IPMT
SpanishPAGOINT
EstonianIPMT
FinnishIPMT
FrenchINTPER
HebrewIPMT
CroatianIPMT
HungarianRRÉSZLET
IndonesianIPMT
ItalianINTERESSI
JapaneseIPMT
KoreanIPMT
LithuanianIPMT
LatvianIPMT
NorwegianRANNUITET
DutchIBET
PolishIPMT
Portuguese (Brazil)IPGTO
Portuguese (Portugal)IPGTO
RomanianIPMT
RussianПРПЛТ
SlovakIPMT
SlovenianIPMT
Serbian (Latin)IPMT
SwedishRBETALNING
ThaiIPMT
TurkishFAİZTUTARI
UkrainianIPMT
VietnameseIPMT
Chinese (Simplified)IPMT
Chinese (Hong Kong)IPMT
Chinese (Traditional)IPMT

Names from Microsoft's support site.

What it does

IPMT(rate, per, nper, pv, [fv], [type])

IPMT(rate,per,nper,pv,[fv],[type]) returns the interest part of a constant annuity payment in one chosen period. The period comes before the total count and starts at one. Future value and timing default to zero; type one means payment at the beginning.

Use a rate per payment period. A positive loan principal normally produces negative interest payments under Excel’s cash-flow sign convention.

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.

=IPMT(0.25,2,2,1000) is about -138.8888889. On this two-payment loan, the interest in the second period is charged on the balance remaining after the first payment. =IPMT(0.25,1,2,1000,0,1) returns zero because a beginning payment at the initial instant has no elapsed-period interest.

Quirks

The documented period range is one through nper. The current helper returns #NUM! outside that range and distinguishes exactly zero rate from a tiny nonzero rate. Type is truncated by the wrapper before its zero/nonzero timing choice.

The newer source checks a valid beginning first period before its PMT rate guard, so it can return zero even at a rate PMT itself rejects. PPMT calls PMT first and can therefore have a different error path on that same otherwise invalid annuity.

Mathematically interest plus principal is the payment. Recorded Excel results can differ in their last bits from either subtraction identity: the notes retain a twelve-period example. Money amounts are not automatically rounded to cents by these functions.

IPMT and PPMT reuse PMT's quotient, one through expm1 and the other through exp

With RN(v) meaning v rounded to 64 bits on the x87 unit and then stored to binary64, take L and q from PMT (FN-PMT-001; with nonzero fv, q = RN(N/em) with an fv numerator that is open). For period k of nper with end-of-period payments, m = nper-k+1, t = -(m*L), em_m is the expm1 of t by the route in FN-PMT-001, and u = exp(t) stored. Then IPMT = -RN(RN(RN(q*em_m) - RN(fv*u))*rate) and PPMT = RN(RN(RN(q - fv)*u)*rate). Interest takes the Kahan expm1, and principal takes the exponential it starts from: 1+em_m fits 36 of 74 principal rows where u fits all 74. So neither answer is the payment less the other (FN-PPMT-001).

FormulaExcelMathematical value
=IPMT(0.05/12,12,360,200000)
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.

-822.0867740866778
0xc089b0b1b69cc35f
-822.0867740866777
0xc089b0b1b69cc35e
=PPMT(0.05/12,12,360,200000)
Excel 16.0.20527.20088 Current Channel, Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA
Inputs and reference value

Typed formula.

mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.

-251.5564719376004
0xc06f71ce9e3ca456
-251.5564719376003
0xc06f71ce9e3ca452

Inputs, build details and evidence

How to implement

Use D and R for ordinary binary64 storage and a stored 64-bit-significand operation. The current route keeps argument validation, timing boundaries and period arithmetic separate.

  1. Validate finite numeric arguments and require 1<=per<=nper. For beginning timing at per=1, return zero before PMT’s rate-domain and reciprocal-pole checks. At exactly zero rate, other valid periods also return zero.
  2. For remaining calls reject a nonpositive growth base and obtain PMT under its own guards. A tiny nonzero rate retains the computation; do not use an epsilon band.
  3. For end timing, fv=0 and a valid rate in the series range, obtain L and the total-period corrected exponential difference em_n from the PMT recipe. Store q=R(pv/em_n); do not recover q by dividing PMT’s already rounded answer by r.
  4. Store m=D(D(nper-per)+1), then t=-D(m*L). Obtain the corrected difference em_m by the same spilled Kahan rule used for PMT.
  5. Return -R(R(q*em_m)*r). Principal instead uses the separately stored EXP(t) result; 1+em_m is not a substitute for that exponential.

Worked second period of a two-period loan at r=0.25, pv=1000: the stated reconstruction has L 0.22314355131420974, total em_n -0.36000000000000004 and q -2777.7777777777774. One period remains, with em_m -0.19999999999999998; the stored products give interest -138.88888888888886. This trace evaluates the reconstruction, rather than adding an Excel capture.

For nonzero fv, the current end helper still forms v_n=D(1+em_n), N=D(pv+D(fv*v_n)) and q=R(N/em_n). Its interest expression is -R(R(R(q*em_m)-R(fv*EXP(t)))*r). This helper does not yet use the later nonzero-fv fold recovered for PMT itself. The note retains only 18 of 27 matching nonzero-fv interest controls; that numerator remains open here.

The helper declines rates outside its series range, opposite nonzero balances and zero/nonfinite em and nonfinite quotients. Beginning timing and other declined cases retain a separate backward-balance candidate with internal log1p/exponential leaves. They are not established by the zero-fv end-timing recipe. The source, first-period guard and unresolved fallback scope supersede the older page’s blanket recurrence description. The interactive calculator remains pinned separately.

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.

IPMT · 4 lines · calc-func/src/catalogue/financial.rs on GitHub
7 ipmt_fn "IPMT" (4, 6) [V "rate", V "per", V "nper", V "pv", V "fv", V "type"] |s, a, sv| {
    let t = timing(s, a, 5)?;
    tv_out(s, tv::ipmt(num(s, a, 0)?, num(s, a, 1)?, num(s, a, 2)?, num(s, a, 3)?, opt(s, a, 4, 0.0)?, t))
}

Kernels shared with other functions

Argument and result plumbing

  • fail catalogue/kit
  • num catalogue/kit
  • opt 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
19929Windows, bitness not recorded, CPU not recorded357
20131Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics31

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.20527.20088

Windows 64-bit (NT 10.0.26200), x86-64, AMD Ryzen 7 4800H, en-ZA

=IPMT(0.05/12,12,360,200000) returned -822.0867740866778 (0xc089b0b1b69cc35f). Inputs were supplied through formula literals. These are controls from this environment, not a same-input comparison with another build.

Observed formulas and results
  • =IPMT(0.05/12,12,360,200000) → -822.0867740866778
    0xc089b0b1b69cc35f (formula-literal)

Excel 16.0 build 19929

Windows, bitness not recorded, CPU not recorded

357 captured inputs are indexed for this environment. Capture dates are not recorded. This is a reading count, not a comparison with another build.

Excel 16.0 build 20131

Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics

31 captured inputs are indexed for this environment. Capture dates: 2026-07-23 to 2026-07-23. This is a reading count, not a comparison with another build.

Alternatives

PPMT returns principal and PMT the full payment. CUMIPMT totals interest over a period interval. ISPMT uses a different level-principal model and a different period convention.

Named variants

No named variants are recorded yet.

Suggest a correction or contribute an implementation · For agents