# make a new schedule
$amortization = new Finance::Amortization(principal => 100000, rate = 0.06/12,
periods = 360);
# get the balance after a the twelveth period
$balance = $amortization->balance(12)
# get the interest paid during the twelfth period
$interest = $amortization->interest(12);
Finance::Amortization is a simple object oriented interface to an
amortization table. Pass in the principal to be amortized, the number
of payments to be made, and the interest rate per payment. It will
calculate the rest on demand, and provides a few methods to ask
for the state of the table after a given number of periods.
Finance::Amortization is written in pure perl and does not depend
on any other modules. It exports no functions; all access is via
methods called on an amortization object. (Except for new(), of course.)
$am = Finance::Amortization->new(principal => 0, rate => 0, periods => 0,
compounding => 12, precision => 2);
Creates a new amortization object. Calling interface is hash style.
The fields principal, rate, and periods are available, all defaulting
Compounding is a parameter which sets how many periods the rate is compounded
over. Thus, if each amortization period is one month, setting compounding
to 12 (the default), will make the rate an annual rate. That is, the
interest rate per period is the rate specified, divided by the compounding.
So, to get an amortization for 30 years on 200000, with a 6% annual rate,
you would call new(principal => 200000, periods => 12*30, rate => 0.06),
the compounding will default to 12, and so the rate will work out right
for monthly payments.
precision is used to specify the number of decimal places to round to
when returning answers. It defaults to 2, which is appropriate for
US currency and many others.
$rate_per_period = $am->rate()
returns the interest rate per period. Ignores any arguments.
$initial_value = $am->principal()
returns the initial principal being amortized. Ignores any arguments.
$number_of_periods = $am->periods()
returns the number of periods in which the principal is being amortized.
Ignores any arguments.
$pmt = $am->payment()
returns the payment per period. This method will cache the value the
first time it is called.
Use Math::BigRat for the calculations.
Provide amortizers for present value, future value, annuities, etc.
Allow for caching calculated values.
Provide output methods and converters to various table modules.
HTML::Table, Text::Table, and Data::Table come to mind.
Write better test scripts.
Better checking for errors and out of range input. Return undef
in these cases.
Use a locale dependent value to set an appropriate default for precision
in the new() method.