module LoanCreator::ExcelFormulas
Source: gist.github.com/mattetti/1015948
Public Instance Methods
ipmt(rate, per, nper, pv, fv=0, type=0)
click to toggle source
Returns the interest payment for a given period for an investment based on periodic, constant payments and a constant interest rate.
# File lib/loan_creator/excel_formulas.rb, line 6 def ipmt(rate, per, nper, pv, fv=0, type=0) p = _pmt(rate, nper, pv, fv, 0); ip = -(pv * _pow1p(rate, per - 1) * rate + p * _pow1pm1(rate, per - 1)) (type == 0) ? ip : ip / (1 + rate) end
ppmt(rate, per, nper, pv, fv=0, type=0)
click to toggle source
Returns the payment on the principal for a given period for an investment based on periodic, constant payments and a constant interest rate.
# File lib/loan_creator/excel_formulas.rb, line 14 def ppmt(rate, per, nper, pv, fv=0, type=0) p = _pmt(rate, nper, pv, fv, type) ip = ipmt(rate, per, nper, pv, fv, type) p - ip end
Protected Instance Methods
_fvifa(rate, nper)
click to toggle source
# File lib/loan_creator/excel_formulas.rb, line 38 def _fvifa(rate, nper) (rate == 0) ? nper : _pow1pm1(rate, nper) / rate end
_pmt(rate, nper, pv, fv=0, type=0)
click to toggle source
# File lib/loan_creator/excel_formulas.rb, line 22 def _pmt(rate, nper, pv, fv=0, type=0) ((-pv * _pvif(rate, nper) - fv ) / ((bigd('1.0') + rate * type) * _fvifa(rate, nper))) end
_pow1p(x, y)
click to toggle source
# File lib/loan_creator/excel_formulas.rb, line 30 def _pow1p(x, y) (x.abs > bigd('0.5')) ? ((1 + x) ** y) : Math.exp(y * Math.log(bigd('1.0') + x)) end
_pow1pm1(x, y)
click to toggle source
# File lib/loan_creator/excel_formulas.rb, line 26 def _pow1pm1(x, y) (x <= -1) ? ((1 + x) ** y) - 1 : Math.exp(y * Math.log(bigd('1.0') + x)) - 1 end
_pvif(rate, nper)
click to toggle source
# File lib/loan_creator/excel_formulas.rb, line 34 def _pvif(rate, nper) _pow1p(rate, nper) end