pub fn future_value_annuity<T, D>(
rate: f64,
periods: u32,
annuity: T,
timing: D,
) -> FinanceResult<f64>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 asroriin formulas.periods- The number of periods such as quarters or years. Often appears asnort.cashflow- The value of the constant cashflow (aka payment).timing-PaymentTimingorbool(false= end of period / Exceltype=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());