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: |
|
|
status% | A variable that returns a value indicating calculation failure or success: |
|
- 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