A dime today or a dime tomorrow

Back To Index

time_value_of_money

Time Value of Money

Let us see what happens when we deposit an amount $A_0$ for a 2 year term.

Assuming that rate of interest is $r$, the deposit at the end of first year will grow to be
$$A_{1} = A_{0}+ rA_{0} = A_0 (1+r)$$

Further assuming same rate of interest, the deposit at the end of 2nd year is: $$A_2 = A_1 (1+r) = A_0 (1+r)^2$$

Future Value of current money

Similarly, if the amount is deposited for N years, the final value of the at the end of term is: $$A_N = A_0 (1+r)^N$$.

Current value of future money

Above expression is the formula for future value of money. It also can be used to calculate current value of future payables i.e $$A_0 = \frac{A_N}{(1+r)^N}$$ Note : $A_0$ is also called the discounted value of $A_N$.

The term of the deposit does not have to be quoted in number years necessarily, it could be months as well. In such a case the symbol $r$ would stand for monthly rate of interest and N for “number of months in term deposit’.

Now let us write a function to calculate time value of money.

In [1]:
###################################################
#  Filename : time_value_of_money                 #
#  Purpose : To demonstrate                       #
#        1. Console input/output                  #
#        2. Control Structures: while, if-else    #
#                                                 #
#  Author : Niel S.                               #
#  The English Tea Company LLC                    #
###################################################


# The main function
def main():

    # The shut down switch for calculator.
    keep_running = 'Y'
    
    #While the switch is on...
    while (keep_running=='Y'):
        #Gather data from screen
        amount = float (input ("Enter amount: "))
        time_n = float (input ("Enter time (+ for FV/ - for CV) : "))
        r      = float (input ("Enter rate of interest: "))
        
        #Function call. User's arguments supplied to parameters.
        time_val = time_value (a=amount,r=r,N=time_n)
        
        #Being smart about Future Value (FV) vs Current Value (CV)
        out_type = 'FV'
        if time_n < 0 : out_type = 'CV'
        
        #Prepare a nice output string, and show results.
        output = 'The '+out_type+' of $'+str(amount)+' is : $'+str(time_val)+'. '
        print (output)
        
        #Ask user if he wishes to shut down the calculator.
        keep_running = input ('Enter Y to continue: ').strip().upper()
        
        #print a nice space separator.
        print ('\n'*2)
    
    return 0



def time_value(a, r, N):
    '''
    Parameters:
        a  = Amount (+ values only)
        r  = Rate of interest (+ values only)
        N  = Number of time-units (Years/Months) (+ or - values). 
        Note: The r must be quoted in same time-units as N.
    
    Returns: a1
        When N > 0 : Future Value of 'a' after N time-units.
        When N < 0 : Current Value of 'a' payable after N time-units.
    '''
    #Check for insane input
    if a < 0 : return -1
    if r < 0 : return -1
    
    #Calculate using formula a_n = a*(1+r)^n
    a1 = a *pow((1+r),N)
    a1 = round (a1,2)
    return a1

if __name__ == '__main__':
    main()
Enter amount: 100
Enter time (+ for FV/ - for CV) : 5
Enter rate of interest: 0.035
The FV of $100.0 is : $118.77. 
Enter Y to continue: y



Enter amount: 100
Enter time (+ for FV/ - for CV) : -5
Enter rate of interest: 0.035
The CV of $100.0 is : $84.2. 
Enter Y to continue: n

Back To Index