This is a minimal library providing various primitive functions to perform financial calculations.
Most functions with Excel and Google Sheets counterparts mimic their behavior and arguments.
This library is designed to be type-agnostic, allowing you to use any type that implements the FloatLike trait.
Default implementations:
f32f64Decimalfrom rust_decimal (viarust_decimalfeature)
You can implement the FloatLike trait for your own types or wrap any decimal-like / floating-point type providing crate for use with this library. Allowing you to choose a type that best fits your precision and performance requirements.
rust_finprim::tvm module.
- Present Value
- Common Uses: Bond Pricing, Discounted Cash Flow, Annuities, etc.
- Future Value
- Common Uses: Compound Interest/Growth, Annuities etc.
- Net Present Value (NPV)
- Common Uses: Capital Budgeting, Investment Analysis, etc.
- Net Present Value with differing discount rates
- Net Present Value for irregular cash flows (XNPV)
- Payment (PMT)
- Common Uses: Bonds, Loan/Mortgage Payments, Annuities, etc.
rust_finprim::rate module.
- APR (Annual Percentage Rate) and EAR (Effective Annual Rate) conversions
- IRR (Internal Rate of Return)
- Common Uses: Investment Analysis, Capital Budgeting, Bond Yields (YTM, YTC), etc.
- Internal Rate of Return for irregular cash flows (XIRR)
- MIRR (Modified Internal Rate of Return)
- Modified Internal Rate of Return for irregular cash flows (XMIRR)
- Time Weighted Return
- Common Uses: Performance Measurement, Portfolio Analysis, Due Diligence, etc.
- Percentage Change
rust_finprim::amort_dep_tax module.
- Amortization Schedule
- Common Uses: Loan/Mortgage Amortization
- Depreciation Schedules for various methods
- Straight line
- Declining balance (e.g. double declining balance)
- Sum of years digits
- MACRS (Modified Accelerated Cost Recovery System) for US tax purposes
- Progressive Income Tax
rust_finprim::derivatives module.
-
1st and 2nd derivative of present value with respect to interest rate
- Useful for calculating duration, convexity and various optimization problems
-
1st and 2nd derivative of WACC (Weighted Average Cost of Capital) with respect to the debt/equity ratio
std- Enabled by default. You can use the library in ano_stdenvironment withdefault-features = falseand enablingno_stdfeature (no_stddepends on thelibmcrate for the core float types).serde- Enables serialization and deserialization of the provided structs usingserde.rust_decimal- Enables support for theDecimaltype from the rust_decimal crate.
Add the following to your Cargo.toml:
[dependencies]
rust_finprim = "0.5.1"Or
cargo add rust_finprimEnable everything:
cargo add rust_finprim --features "serde rust_decimal"Disable std and enable no_std:
cargo add rust_finprim --no-default-features --features "no_std"