index.js

/**
 * Small library for calculation of basic financial factors.
 * @module finance-factors
 * @author diegofigs <diego.fv94@gmail.com>
 * @license MIT
 */

/**
 * Returns a Future Worth Factor assuming a single payment.
 * @param {Number} i 100-based interest rate e.g. 15% = 15
 * @param {Number} n number of periods
 * @return {Number}
 * @example let futureWorth = singleFW(5, 1);
 * console.log(futureWorth); // Returns 1.05
 */
export function singleFW (i, n) {
  let futureWorthFactor = Math.pow((1 + (i / 100)), n)
  return futureWorthFactor
}

/**
 * Returns a Present Worth Factor assuming a single payment
 * in the future.
 * @param {Number} i 100-based interest rate e.g. 15% = 15
 * @param {Number} n number of periods
 * @return {Number}
 * @example let presentWorth = singlePW(5, 1);
 * console.log(presentWorth); // Returns 0.9523809523809523
 */
export function singlePW (i, n) {
  let presentWorthFactor = 1 / singleFW(i, n)
  return presentWorthFactor
}

/**
 * Returns an Annual Worth Factor assuming a single payment.
 * @param {Number} i 100-based interest rate e.g. 15% = 15
 * @param {Number} n number of periods
 * @return {Number}
 */
export function uniformAWfromP (i, n) {
  let futureWorthFactor = this.singleFW(i, n)
  let annualWorthFactor = (futureWorthFactor * (i / 100) / (futureWorthFactor - 1))
  return annualWorthFactor
}

/**
 * Returns an Annual Worth Factor assuming a single payment
 * in the future.
 * @param {Number} i 100-based interest rate e.g. 15% = 15
 * @param {Number} n number of periods
 * @return {Number}
 */
export function uniformAWfromF (i, n) {
  let futureWorthFactor = this.singleFW(i, n)
  let annualWorthFactor = ((i / 100) / (futureWorthFactor - 1))
  return annualWorthFactor
}

/**
 * Returns a Future Worth Factor assuming an uniform annual
 * payment across 'n' number of periods.
 * @param {Number} i 100-based interest rate e.g. 15% = 15
 * @param {Number} n number of periods
 * @return {Number}
 */
export function uniformFWfromA (i, n) {
  return 1 / uniformAWfromF(i, n)
}

/**
 * Returns a Present Worth Factor assuming an uniform annual
 * payment across 'n' number of periods.
 * @param {Number} i 100-based interest rate e.g. 15% = 15
 * @param {Number} n number of periods
 * @return {Number}
 */
export function uniformPWfromA (i, n) {
  return 1 / uniformAWfromP(i, n)
}