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
Language
Name in Excel
Arabic
IPMT
Bulgarian
IPMT
Czech
PLATBA.ÚROK
Danish
R.YDELSE
German
ZINSZ
Greek
IPMT
English (Australia)
IPMT
English (United Kingdom)
IPMT
English (United States)
IPMT
Spanish
PAGOINT
Estonian
IPMT
Finnish
IPMT
French
INTPER
Hebrew
IPMT
Croatian
IPMT
Hungarian
RRÉSZLET
Indonesian
IPMT
Italian
INTERESSI
Japanese
IPMT
Korean
IPMT
Lithuanian
IPMT
Latvian
IPMT
Norwegian
RANNUITET
Dutch
IBET
Polish
IPMT
Portuguese (Brazil)
IPGTO
Portuguese (Portugal)
IPGTO
Romanian
IPMT
Russian
ПРПЛТ
Slovak
IPMT
Slovenian
IPMT
Serbian (Latin)
IPMT
Swedish
RBETALNING
Thai
IPMT
Turkish
FAİZTUTARI
Ukrainian
IPMT
Vietnamese
IPMT
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
=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).
Formula
Excel
Mathematical 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-ZAInputs 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-ZAInputs and reference value
Typed formula.
mpmath at 800 bits with rate the binary64 0x3f71111111111111 that 0.05/12 evaluates to; correctly rounded.
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.
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.
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.
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.
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.
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.
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))
}
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 build
Platform and CPU
Captured inputs
19929
Windows, bitness not recorded, CPU not recorded
357
20131
Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics
31
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.
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.
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.