Known larger differences on 59 of 237 recorded answers
Of 237 recorded answers (33 in the answer bank and 204 workbook cells), 59 do not match: 18 differ by more than 16 ULP, 41 differ by at most 16 ULP. How we measure this · See the Rust code
Local names in 40 languages
Language
Name in Excel
Arabic
PPMT
Bulgarian
PPMT
Czech
PLATBA.ZÁKLAD
Danish
H.YDELSE
German
KAPZ
Greek
PPMT
English (Australia)
PPMT
English (United Kingdom)
PPMT
English (United States)
PPMT
Spanish
PAGOPRIN
Estonian
PPMT
Finnish
PPMT
French
PRINCPER
Hebrew
PPMT
Croatian
PPMT
Hungarian
PRÉSZLET
Indonesian
PPMT
Italian
P.RATA
Japanese
PPMT
Korean
PPMT
Lithuanian
PPMT
Latvian
PPMT
Norwegian
AMORT
Dutch
PBET
Polish
PPMT
Portuguese (Brazil)
PPGTO
Portuguese (Portugal)
PPGTO
Romanian
PPMT
Russian
ОСПЛТ
Slovak
PPMT
Slovenian
PPMT
Serbian (Latin)
PPMT
Swedish
AMORT
Thai
PPMT
Turkish
ANA_PARA_ÖDEMESİ
Ukrainian
PPMT
Vietnamese
PPMT
Chinese (Simplified)
PPMT
Chinese (Hong Kong)
PPMT
Chinese (Traditional)
PPMT
Names from Microsoft's support site.
What it does
PPMT(rate, per, nper, pv, [fv], [type])
PPMT(rate,per,nper,pv,[fv],[type]) returns the principal part of one payment in a fixed-rate, equal-payment annuity. Period per starts at one and precedes nper in the argument list. Omitted fv and type are zero; type one pays at the beginning.
Try it
=PPMT(0.25,2,2,1000) is about -555.5555556, the final principal repayment on a two-period loan. The first principal repayment is about -444.4444444, so the mathematical pair repays the original thousand.
=PPMT(0,2,4,1000) returns -250; at zero rate all four equal payments are principal.
Quirks
Use a periodic rate and a matching period count. Positive principal and negative repayments describe a loan. Per must lie between one and nper; the current helper checks it through IPMT after obtaining PMT.
PPMT’s current first operation is a PMT call. It can therefore return a PMT domain error where IPMT’s beginning-first-period guard returns zero. At a valid beginning first period the whole payment is principal.
The mathematical identity PPMT=PMT-IPMT does not reproduce all recorded Excel bits. FN-PPMT-001 retains twelve loan periods where only two such binary64 subtractions equal the recorded principal. Summing principal over a schedule and reproducing CUMPRINC are separate numerical tasks.
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.
PPMT is not PMT minus IPMT, and sits further from the exact value than PMT
On the 30-year loan PPMT(0.05/12,k,360,200000), for k from 1 to 12 every PPMT answer is 3 to 5 units above the correctly rounded principal payment, while PMT is 1 unit away. Excel's own answers do not satisfy the identity: in binary64, PMT - IPMT equals PPMT in 2 of the 12 periods and PMT - PPMT equals IPMT in 7. So reproducing PPMT from PMT and IPMT misses the last bits. FN-IPMT-001 gives the route Excel takes instead.
Formula
Excel
Mathematical value
=PPMT(0.05/12,1,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.
For the measured zero-fv, end-timing route, reuse L, total-period em_n and the stored q from the IPMT recipe. Let R denote its stored arithmetic operation.
Obtain PMT and perform the IPMT guard path, including period validation. Exactly zero rate uses the linear principal result.
For the eligible nonzero-rate helper, form the binary64 remaining count m=(nper-per)+1 and argument t=-(m*L), with each named operation stored.
Obtain the stored public exponential u=EXP(t). Do not replace it by 1+em_m: the note’s 74 principal controls distinguish those values.
At fv=0 return R(R(q*u)*r). With a nonzero fv, the current candidate is R(R(R(q-fv)*u)*r), but q’s nonzero-fv numerator retains the limitation described on IPMT.
For the second-period example, the reconstruction has q -2777.7777777777774, u 0.8 and principal -555.5555555555555. Its PMT is -694.4444444444443 and interest -138.88888888888886; ordinary binary64 subtraction of those two produces -555.5555555555554 instead. These are worked reconstruction values, not a new Excel run.
The source retains 138 of 138 zero-fv principal controls and 25 of 27 nonzero-fv controls for its end route. Beginning timing and helper-declined cases use a separate backward-discount candidate, rather than simply subtracting interest. Its current form discounts payment-carried_future_interest over the periods remaining, with a beginning-timing adjustment to that carried interest.
The logarithm’s exceptions, nonzero-fv numerator, beginning-timing body and other recorded residuals remain open. Reusing PMT’s newer balance fold without separately validating these period helpers would transfer a result outside its established scope. The separately pinned calculator can predate the cited source changes.
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.
8 ppmt_fn "PPMT" (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::ppmt(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
396
20131
Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics
7
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
=PPMT(0.05/12,12,360,200000) returned -251.5564719376004 (0xc06f71ce9e3ca456). =PPMT(0.05/12,1,360,200000) returned -240.30991269094474 (0xc06e09eace050723). Inputs were supplied through formula literals. These are controls from this environment, not a same-input comparison with another build.
396 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
7 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
IPMT returns interest and PMT the entire payment. CUMPRINC totals principal over an interval, with a separately recorded route; ISPMT belongs to a level-principal schedule.