Skip to main content

future_value_annuity

Function future_value_annuity 

Source
pub fn future_value_annuity<T, D>(
    rate: f64,
    periods: u32,
    annuity: T,
    timing: D,
) -> FinanceResult<f64>
where T: Into<f64> + Copy, D: Into<PaymentTiming>,
Expand description

Returns the future value of annuity (a series of constant cashflows) at a constant rate. Returns f64.

The future value annuity formula is:

future value ann = sum( cashflow * (1 + rate)period )

or

future value ann = Constant_Cashflow * ((1+periodic_rate)^n -1) / periodic_rate

§Arguments

  • rate - The rate at which the investment grows or shrinks per period, expressed as a floating point number. For instance 0.05 would mean 5%. Often appears as r or i in formulas.
  • periods - The number of periods such as quarters or years. Often appears as n or t.
  • cashflow - The value of the constant cashflow (aka payment).
  • timing - PaymentTiming or bool (false = end of period / Excel type=0).

§Errors

Returns crate::FinanceError if rate is less than or equal to -1.0, money is non-finite, or periods is zero.

§Examples

Ordinary annuity (bool Excel style):

use finance_solution::*;
let my_annuity = future_value_annuity(0.034, 5, 500, false).unwrap();
assert_approx_equal!(my_annuity, -2_675.8789282);

Annuity due with the enum (preferred):

use finance_solution::{future_value_annuity, PaymentTiming};
let due = future_value_annuity(0.034, 5, 500, PaymentTiming::BeginningOfPeriod).unwrap();
let ordinary = future_value_annuity(0.034, 5, 500, PaymentTiming::EndOfPeriod).unwrap();
assert!(due.abs() > ordinary.abs());

Solution struct (formulas + related fields):

use finance_solution::*;
let sol = future_value_annuity_solution(0.034, 5, 500, PaymentTiming::EndOfPeriod).unwrap();
let final_answer = sol.future_value();
assert_approx_equal!(final_answer, -2_675.8789282);

Monthly contributions:

let rate = 0.021;       // 2.1% per month
let periods = 12;
let cashflow = 2_000;
let future_value_ann = future_value_annuity(rate, periods, cashflow, false).unwrap();
assert!(future_value_ann.is_finite());