Financial functions

PPMT

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
LanguageName in Excel
ArabicPPMT
BulgarianPPMT
CzechPLATBA.ZÁKLAD
DanishH.YDELSE
GermanKAPZ
GreekPPMT
English (Australia)PPMT
English (United Kingdom)PPMT
English (United States)PPMT
SpanishPAGOPRIN
EstonianPPMT
FinnishPPMT
FrenchPRINCPER
HebrewPPMT
CroatianPPMT
HungarianPRÉSZLET
IndonesianPPMT
ItalianP.RATA
JapanesePPMT
KoreanPPMT
LithuanianPPMT
LatvianPPMT
NorwegianAMORT
DutchPBET
PolishPPMT
Portuguese (Brazil)PPGTO
Portuguese (Portugal)PPGTO
RomanianPPMT
RussianОСПЛТ
SlovakPPMT
SlovenianPPMT
Serbian (Latin)PPMT
SwedishAMORT
ThaiPPMT
TurkishANA_PARA_ÖDEMESİ
UkrainianPPMT
VietnamesePPMT
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

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.

=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).

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

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.

FormulaExcelMathematical 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-ZA
Inputs and reference value

Typed formula.

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

-240.30991269094474
0xc06e09eace050723
-240.30991269094463
0xc06e09eace05071f

Inputs, build details and evidence

How to implement

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.

  1. Obtain PMT and perform the IPMT guard path, including period validation. Exactly zero rate uses the linear principal result.
  2. 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.
  3. 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.
  4. 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.

PPMT · 4 lines · calc-func/src/catalogue/financial.rs on GitHub
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))
}

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 recorded396
20131Windows, bitness not recorded, AMD Ryzen 7 4800H with Radeon Graphics7

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

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

Observed formulas and results
  • =PPMT(0.05/12,12,360,200000) → -251.5564719376004
    0xc06f71ce9e3ca456 (formula-literal)
  • =PPMT(0.05/12,1,360,200000) → -240.30991269094474
    0xc06e09eace050723 (formula-literal)

Excel 16.0 build 19929

Windows, bitness not recorded, CPU not recorded

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.

Named variants

No named variants are recorded yet.

Suggest a correction or contribute an implementation · For agents