Contact

PPMT Function (OpenOffice Calc)

Financial Intermediate OpenOffice Calc

Calculate principal repayment with OpenOffice PPMT, using native payment splits, zero-interest cases and beginning-period timing with signed cash flows.

Verification status: Eight ordinary reference formulas were recalculated in Apache OpenOffice 4.1.16 on Linux x86-64, Build 9816, through generated native ODF and GUI hard recalculation. Saved identities and results were checked. How formula examples are checked

Quick answer: =PPMT(.01;1;12;1000) returned approximately -78.848788678342 in the tested Apache OpenOffice 4.1.16 build.

Availability and version history

  • Introduced: First release not established; documented by OpenOffice.org 3.3.
  • Supported in: Apache OpenOffice 4.1.16; this is a verified release, not a final supported version.
  • Scope: Desktop Calc, English function names and semicolon-separated formulas.
  • Checked: October 14, 2026. Eight ordinary reference formulas were recalculated from generated ODF in 4.1.16 on Linux x86-64, Build 9816. Source and independent mathematics were also checked.

What PPMT returns

PPMT is the principal component of a constant annuity payment. It subtracts IPMT’s interest component from the matching PMT. With a positive borrowed present value, the principal component is normally a negative outgoing cash flow. Release implementation.

Syntax and arguments

=PPMT(Rate; Period; NPer; PresentValue [; FutureValue [; Type]])

The first four arguments are required: periodic Rate, selected Period, total NPer and PresentValue. FutureValue defaults to 0 and Type defaults to 0. Use Type=1 for beginning-period payments. The selected period must lie between 1 and NPer in this implementation.

Eight reproducible examples

The native column contains saved 4.1.16 results; the independent column uses high-precision mathematical calculations. Values are displayed to twelve decimal places, so harmless final-place differences remain visible. Rate decimals such as 0.05 represent 5%, not 0.05%.

Formula Native 4.1.16 result Independent reference
=PPMT(.01;1;12;1000) -78.848788678342 -78.848788678342
=PPMT(.01;2;12;1000) -79.637276565125 -79.637276565125
=PPMT(.01;12;12;1000) -87.969097701328 -87.969097701328
=PPMT(.01;1;12;1000;0;1) -87.969097701328 -87.969097701328
=PPMT(.01;2;12;1000;0;1) -78.848788678342 -78.848788678342
=PPMT(0;2;12;1200) -100 -100
=PPMT(.01;2;12;-1000) 79.637276565125 79.637276565125
=PPMT(.02;3;5;1000;-500) -99.960796613068 -99.960796613068

Practical worksheet

For a model loan of 1000 over twelve periods at 1%, the first principal component is the constant negative payment minus the āˆ’10 interest component. Later principal components become larger in magnitude as the outstanding balance decreases. Compare the first, second and final rows in the table.

At zero interest, =PPMT(0;2;12;1200) is āˆ’100. With beginning-period payments, the first IPMT is zero, so the first principal component equals the entire payment. The first two due-payment examples make that timing explicit.

Advanced interpretation and checks

The equation PPMT=PMTāˆ’IPMT is useful for auditing a schedule. It must use exactly the same Rate, NPer, PresentValue, FutureValue and Type in all three calls. Adding components from different payment timings does not provide a valid reconciliation.

For a fully amortizing ordinary loan with final target zero, summing unrounded principal components over all periods gives āˆ’PresentValue within floating-point rounding. That is a model identity, not an assertion that a full native schedule was executed for this guide. A nonzero final target changes the total principal repaid.

A display of two decimal places does not round the underlying payment to cents. If a contract rounds each component or payment separately, reproduce that rounding policy explicitly and check the final balance rather than relying on the unrounded annuity identity.

Boundaries and troubleshooting

The period guard rejects values outside 1..NPer; a fractional period within that interval is not explicitly rejected by the source. Use integer installment numbers in an actual schedule. Signs indicate cash direction, and a positive result for a negative initial value can be legitimate from the opposite viewpoint. Avoid applying ABS before recombining components, because that discards the equation’s signs.

Also validate Rate > āˆ’1 before calling this function in an ordinary annuity model. The pinned helper calls ScGetZinsZ and then ScGetRmz, whose nonzero-rate branch uses log1p(Rate). Invalid-rate IPMT and PPMT cases were not executed here; this source-based caution does not claim an observed failure for either function.

Official evidence and checking scope

The generated ODF input produced the informational load warning ā€œNot all attributes could be read.ā€ After it was acknowledged, the sheet was hard-recalculated and saved separately. All eight ordinary function identities and results were reconciled; a stale SUM cache changed from 999999 to 3 and an uncached SUM returned 7. This establishes the stated formula examples, not every workbook style or every invalid input. The original XLSX was not executed. Other explanatory calculations are independent mathematical checks; this guide does not claim a fully executed amortization schedule, other releases or all boundary cases.