lib/exonio/financial.rb
def nper(rate, pmt, pv, fv = 0, end_or_beginning = 0)
      z = pmt * (1 + rate * end_or_beginning) / rate
      temp = Math.log((-fv + z) / (pv + z))

      temp / Math.log(1 + rate)
    end
def nper(rate, pmt, pv, fv = 0, end_or_beginning = 0)
      z = pmt * (1 + rate * end_or_beginning) / rate
      temp = Math.log((-fv + z) / (pv + z))

      temp / Math.log(1 + rate)
    end
Calculates the number of payment periods for an investment based on
 constant-amount periodic payments and a constant interest rate.

 @param rate [Float] The interest rate as decimal (not per cent) per period
 @param pmt [Float] The payment amount made each period
 @param pv [Float] The present value of the payments
 @param fv [Float] The future value remaining after the final payment has been made
 @param end_or_begining [Integer] Whether payments are due at the end (0) or
   beggining (1) of each period

 @return [Float]

 @example
   Exonio.nper(0.07 / 12, -150, 8000) # ==> 64.07334877066185