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