Q(uick)BASIC Function: PV#

Quick View

PV#

A function that returns the present value, or lump sum that a series of payments to be paid in the future is worth now

Worth knowing

Useful and cross-version information about the programming environments of QBasic and QuickBasic.

Syntax
  • PV# (rate#, nper#, pmt#, fv#, type%, status%)
Description/Parameter(s)
rate# The interest rate per period (for example, .12).
nper# The number of payment periods in the annuity.
pmt# The payment to be made each period.
fv# The future value.
type% An integer expression:
  • 0 = end-of-period payment;
  • 1 = beginning-of-period payment.
status% A variable that returns a value indicating calculation failure or success:
  • 0 = success;
  • 1 = failure.
  • The argument rate# is the interest rate per period. For example, if you get a car loan at a 10% annual interest rate and make monthly payments, the rate per period would be .10/12, or .0083.
  • The argument nper# is the total number of payment periods in an annuity. For example, if you get a 4-year car loan and make monthly payments, your loan has a total number of 4x12, or 48 payment periods.
  • The arguments rate# and nper# must use consistent units. For example:
rate nper Loan description
.10/12 4*12 Monthly payment, 4-year loan, 10% annual interest
.10 4 Annual payment, 4-year loan, 10% annual interest
  • The pmt# is the payment made each period, and cannot change over the life of the annuity. Typically, pmt# contains principal and interest.
  • The argument fv# is the future value, or cash balance sometime in the future after the final payment is made. The future value of a loan, for example, is 0. As another example, if you think you will need $50,000 in 18 years to pay for your child's education, then $50,000 is the future value.
  • The argument status% can be any variable that returns information about the success or failure of the calculation. The value of status% will be 0 if the calculation was successful, and 1 if it was not.

Usage Notes

  • For all arguments, cash you pay out, such as deposits to savings, is represented by negative numbers; cash you receive, such as dividend checks, is represented by positive numbers.
  • The formula for PV# is found in the BASIC Language Reference manual.

Important

  • To use PV# in the QBX environment, use the FINANCER.QLB Quick library. To use PV# outside the QBX environment, link your program with the appropriate FINANCxx.LIB file. Depending on the compiler options you chose when you installed BASIC, one or more of the following files will be available:
Filename Compiler options
FINANCER.LIB 80x87 or emulator math; DOS or OS/2 real mode
FINANCAR.LIB Alternate math; DOS or OS/2 real mode
FINANCEP.LIB 80x87 or emulator math; OS/2 protected mode
FINANCAP.LIB Alternate math; OS/2 protected mode
  • The FINANC.BI header file contains the necessary function declarations for PV#.
  • For more information on using libraries, see "Creating and Using Quick Libraries" and "Using LINK and LIB" in the BASIC Programmer's Guide.
Example

This example uses the PV# function to return the present value of an annuity.
Note: To run this example you must use a Quick library that includes the procedures contained in the date/time/format and financial function library files. The following include files must also be present.

'$INCLUDE: 'FINANC.BI' '$INCLUDE: 'FORMAT.BI' CONST ENDPERIOD = 0 CONST BEGINPERIOD = 1 CONST DOLLARFORMAT$ = "$#,###,##0.00" DEFDBL A-Z DIM APR AS SINGLE DIM Status AS INTEGER APR = .102 Period = 20 YearlyIncome = 50000 FutureValue = 1000000 'Explain the premise. CLS PRINT "It seems you've won a million dollar lottery and you're going to" PRINT "get $50,000.00 each year for the next 20 years." PRINT PRINT "You're curious about how much it's actually costing the people who" PRINT "run the lottery to pay you that $1,000,000.00 over 20 years." PRINT PRINT "Assume that the prevailing interest rate is 10.2% compounded annually." PRINT 'Calculate the present value of an annuity. PresentValue = PV#(APR, 20, -YearlyIncome, FutureValue, BEGINPERIOD, Status) 'Examine Status to determine success or failure of PV#. IF Status THEN 'If unsuccessful, announce a problem. PRINT "There was an error in calculating the present value of an annuity." ELSE 'If successful, display the results. PresentValue$ = FormatD$(PresentValue, DOLLARFORMAT$) PRINT "Calculations show that the lottery people only have to deposit "; PRINT PresentValue$; "" PRINT "to ensure that you get your money." END IF