Expand description
finance_solution
is a collection of financial functions related to time-value-of-money.
In addition to being rigourously tested with symmetry tests as well as excel-matching tests,
the library provides solution
structs to give the user more detailed information about
each transaction, which has record-keeping benefits for financial software and
learning benefits for students of finance.
§Example
use finance_solution::*;
let (rate, periods, present_value, is_continuous) = (0.034,10,1000, false);
let fv = future_value_solution(rate, periods, present_value, is_continuous);
dbg!(fv);
which prints to the terminal:
fv = TvmSolution {
calculated_field: FutureValue,
continuous_compounding: false,
rate: 0.034,
periods: 10,
fractional_periods: 10.0,
present_value: 1000.0,
future_value: -1397.0288910795477,
formula: "-1397.0289 = -1000.0000 * (1.034000 ^ 10)",
symbolic_formula: "fv = -pv * (1 + r)^n",
}
and if you run this line:
fv.series().print_table();
a pretty-printed table will be displayed in the terminal:
period rate value
------ -------- -----------
0 0.000000 -1_000.0000
1 0.034000 -1_034.0000
2 0.034000 -1_069.1560
3 0.034000 -1_105.5073
4 0.034000 -1_143.0946
5 0.034000 -1_181.9598
6 0.034000 -1_222.1464
7 0.034000 -1_263.6994
8 0.034000 -1_306.6652
9 0.034000 -1_351.0918
10 0.034000 -1_397.0289
This can be very useful for functions in the cashflow
family, such as a payment.
let (rate, periods, present_value, future_value, due) = (0.034, 10, 1000, 0, false);
let pmt = payment_solution(rate, periods, present_value, future_value, due);
pmt.print_table();
Which prints to the terminal:
// period payments_to_date payments_remaining principal principal_to_date principal_remaining interest interest_to_date interest_remaining
// ------ ---------------- ------------------ --------- ----------------- ------------------- -------- ---------------- ------------------
// 1 -119.6361 -1_076.7248 -85.6361 -85.6361 -914.3639 -34.0000 -34.0000 -162.3609
// 2 -239.2722 -957.0887 -88.5477 -174.1838 -825.8162 -31.0884 -65.0884 -131.2725
// 3 -358.9083 -837.4526 -91.5583 -265.7421 -734.2579 -28.0778 -93.1661 -103.1947
// 4 -478.5443 -717.8165 -94.6713 -360.4134 -639.5866 -24.9648 -118.1309 -78.2300
// 5 -598.1804 -598.1804 -97.8901 -458.3036 -541.6964 -21.7459 -139.8768 -56.4840
// 6 -717.8165 -478.5443 -101.2184 -559.5220 -440.4780 -18.4177 -158.2945 -38.0663
// 7 -837.4526 -358.9083 -104.6598 -664.1818 -335.8182 -14.9763 -173.2708 -23.0901
// 8 -957.0887 -239.2722 -108.2183 -772.4001 -227.5999 -11.4178 -184.6886 -11.6723
// 9 -1_076.7248 -119.6361 -111.8977 -884.2978 -115.7022 -7.7384 -192.4270 -3.9339
// 10 -1_196.3609 -0.0000 -115.7022 -999.0000 -0.0000 -3.9339 -196.3609 0.0000
Re-exports§
pub extern crate num_format;
Modules§
- cashflow
- The internal module which supports the solution struct for the Cashflow family of functions (e.g.,
payment
). - convert_
rate - Rate conversions. Given a rate and number of compound periods per year, what is this rate
when converted to APR, Effective annual, and Periodic rates? Also consider the
apr
ear
andepr
helper functions. - future_
value - Future value calculations. Given an initial investment amount, a number of periods such as periods, and fixed or varying interest rates, what is the value of the investment at the end?
- future_
value_ annuity - Future value annuity calculations. Given a series of cashflows, a number of periods such as years, and a fixed interest rate, what is the value of the series of cashflows (annuity) at the final payment?
- net_
present_ value - Net Present Value calculations. Given a series of cashflows, an initial investment (the cashflow at time0), a number of periods such as years, and fixed or varying interest rates, what is the net value of the series of cashflows right now?
- nper
- Number of periods calculations for scenarios with payments. Returns the number of periods required for a Present Value to achieve a Future Value with a given set of annuities (payments) at a specified periodic rate. The only module still in beta.
- payment
- Payment calculations. What is the periodic payment needed for an amortized loan and how much of that is interest or principal?
- periods
- Number of periods calculations. Given a periodic rate, present value, and future value, find the number of periods needed to satisfy the equation.
- present_
value - Present value calculations. Given a final amount, a number of periods such as years, and fixed or varying interest rates, what is the current value?
- present_
value_ annuity - Present value annuity calculations. Given a series of cashflows, a number of periods such as years, and fixed or varying interest rates, what is the current value of the series of cashflows (annuity) right now?
- rate
- Periodic rate calculations. Given an initial investment amount, a final amount, and a number of periods what does the rate per period need to be?
- round
- Utilities for rounding money amounts to the nearest hundredth or ten-thousandth part.
- tvm
- The internal module which supports the solution struct for the family of Time-value-of-money equations which do not involve payments. For example, future value, present value, rate, and periods.
- tvm_
convert_ rate - The internal module which supports the solution struct for Rate Conversion (see
convert_rate
).
Macros§
- assert_
approx_ equal - assert_
approx_ equal_ symmetry_ test - assert_
rounded_ 2 - assert_
rounded_ 4 - assert_
rounded_ 6 - assert_
rounded_ 8 - assert_
same_ sign_ or_ zero - is_
approx_ equal - is_
approx_ equal_ symmetry_ test - repeating_
vec
Structs§
- Cashflow
Period - Cashflow
Series - Cashflow
Solution - A record of a cash flow calculation such as payment, net present value, or the present value or future value of an annuity.
- Convert
Rate Solution - Nper
Solution - NpvPeriod
- NpvSeries
- NpvSolution
- The custom solution information of a NPV scenario. The struct values are immutable by the user of the library.
- Payment
Series - Payment
Solution - Scenario
Entry - Scenario
List - TvmPeriod
- The value of an investment at the end of a given period, part of a Time Value of Money calculation.
- TvmSchedule
Solution - A record of a Time Value of Money calculation where the rate may vary by period.
- TvmSeries
- TvmSolution
Enums§
- Cashflow
Variable - Convert
Rate Variable - The possible types of rates to convert.
- Schedule
- TvmVariable
- Enumeration used for the
calculated_field
field inTvmSolution
and [TvmSchedule
] to keep track of what was calculated, either the periodic rate, the number of periods, the present value, or the future value. - Value
Type
Functions§
- apr
- Helper function to convert an quoted annual rate (apr) into all possible conversions (ear, epr). Returns a solution struct.
- apr_
continuous - Helper function to convert an APR into an EAR using continuous compounding. Returns solution struct.
- assert_
rounded_ 2 - assert_
rounded_ 4 - assert_
rounded_ 6 - assert_
rounded_ 8 - convert_
apr_ to_ ear - Convert a nominal interest rate (Annual rate, APR) to EAR (effective annual rate). Returns f64.
- convert_
apr_ to_ ear_ solution - Convert an APR to EAR (effective annual rate). Returns a custom type with additional functionality and extra information available in the dbg!().
- convert_
apr_ to_ epr - Convert APR (annual rate) to periodic rate. Returns f64.
- convert_
apr_ to_ epr_ solution - Convert APR (annual rate) to periodic rate. Returns a custom solution type.
- convert_
ear_ to_ apr - Convert an EAR to APR. Returns f64.
- convert_
ear_ to_ apr_ solution - Convert an EAR to APR. Returns solution struct with additional information and functionality.
- convert_
ear_ to_ epr - Convert an EAR (Effective Annual Rate) to periodic rate (aka EPR, effective periodic rate). Returns f64.
- convert_
ear_ to_ epr_ solution - Convert an EAR (Effective Annual Rate) to periodic rate (also known as EPR). Returns a solution struct with additional information and functionality. /// Related Functions:
- convert_
epr_ to_ apr - Convert periodic rate to APR (aka Annual rate, nominal interest rate, Annual Percentage Rate). Returns f64.
- convert_
epr_ to_ apr_ solution - Convert periodic rate to APR (aka Annual rate, nominal interest rate, Annual Percentage Rate). Returns a custom solution type.
- convert_
epr_ to_ ear - Convert a periodic rate (aka EPR, effective periodic rate) to EAR (effective annual rate). Return a single f64 value.
- convert_
epr_ to_ ear_ solution - Convert a periodic rate (EPR) to effective annual rate (EAR), returning a solution struct with additionality information and features.
- ear
- Helper function to convert an effective annual rate (ear) into all possible conversions (apr, epr). Returns a solution struct.
- ear_
continuous - Helper function to convert an EAR into an APR using continuous compounding. Returns solution struct.
- epr
- Helper function to convert a periodic interest rate (EPR) to all rate conversions. Returns solution struct.
- future_
value - Returns the value of an investment after it has grown or shrunk over time, using a fixed rate.
- future_
value_ annuity - Returns the future value of annuity (a series of constant cashflows) at a constant rate. Returns f64.
- future_
value_ annuity_ solution - Returns the future value of annuity (a series of constant cashflows) at a constant rate. Returns custom solution struct with additional information and functionality.
- future_
value_ schedule - Calculates a future value based on rates that change for each period.
- future_
value_ schedule_ solution - Calculates a future value based on rates that change for each period, returning a struct with all of the inputs and results.
- future_
value_ solution - Calculates the value of an investment after it has grown or shrunk over time and returns a struct with the inputs and the calculated value. This is used for keeping track of a collection of financial scenarios so that they can be examined later.
- net_
present_ value - Returns the net present value of a future series of constant cashflows and constant rate, subtracting the initial investment cost. Returns f64.
- net_
present_ value_ schedule - Returns the net present value of a schedule of rates and cashflows (can be varying), subtracting the initial investment cost. Returns f64.
- net_
present_ value_ schedule_ solution - Returns the net present value of a schedule of rates and cashflows (can be varying), subtracting the initial investment cost. Returns a custom solution struct with detailed information and additional functionality.
- net_
present_ value_ solution - Returns the net present value of a future series of constant cashflows and constant rate, subtracting the initial investment cost. Returns a solution struct with additional features..
- nper
- Returns the number of periods required for an annuity (payments) to reach a future value, at a specified periodic rate. Still in beta.
- nper_
solution - Returns f64 for Number of Periods (NPER). Receive the number of periods required for a present value to equal a future value based on a set of payments (annuity) at an interest rate. If there is no initial present value, use 0. This is equivalent to the NPER function in Excel / Google Sheets.
- payment
- Returns the payment needed at the end of every period for an amortized loan.
- payment_
solution - Calculates the payment needed for each period for an amortized loan and creates a struct showing the interest, the formula, and optionally the period-by-period values.
- periods
- Returns the number of periods given a periodic rate along with the present and future values, using simple compounding.
- periods_
solution - Calculates the number of periods given a periodic rate along with the present and future values using simple compounding; and builds a struct with the input values, an explanation of the formula, and the option to calculate the period-by-period values.
- present_
value - Returns the current value of a future amount using a fixed rate.
- present_
value_ annuity - Returns the present value of an annuity (series of constant cashflows) at a constant rate. Returns f64.
- present_
value_ annuity_ accumulator - present_
value_ annuity_ solution - Returns the present value of a future series of constant cashflows and constant rate. Returns custom solution type with additional information and functionality.
- present_
value_ schedule - Calculates a present value based on rates that change for each period.
- present_
value_ schedule_ solution - Calculates a present value based on rates that change for each period and returns a struct with the inputs and the calculated value.
- present_
value_ solution - Calculates the current value of a future amount using a fixed rate and returns a struct with the inputs and the calculated value. This is used for keeping track of a collection of financial scenarios so that they can be examined later.
- rate
- Returns the periodic rate of an investment given the number of periods along with the present and future values.
- rate_
solution - Returns the periodic rate of an investment given the number of periods along with the present and future values.
- round_2
- Round to two decimal places. This function uses f64::round() which rounds halfway cases away from 0.0.
- round_4
- Round to four decimal places. This function uses f64::round() which rounds halfway cases away from 0.0.
- round_6
- Round to six decimal places. This function uses f64::round() which rounds halfway cases away from 0.0.
- round_8
- Round to eight decimal places. This function uses f64::round() which rounds halfway cases away from 0.0.