lib/exonio/financial.rb in exonio-0.5.3 vs lib/exonio/financial.rb in exonio-0.5.4
- old
+ new
@@ -48,21 +48,23 @@
# 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 number of payments to be made
- # @param pv [Float] The present value
+ # @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
#
def nper(rate, pmt, pv, fv = 0, end_or_beginning = 0)
+ return (-pv - fv) / pmt if rate.zero?
+
z = pmt * (1 + rate * end_or_beginning) / rate
temp = Math.log((-fv + z) / (pv + z))
temp / Math.log(1 + rate)
end