Crates.io | fdec |
lib.rs | fdec |
version | 0.3.1 |
source | src |
created_at | 2021-07-14 18:49:56.037091 |
updated_at | 2021-10-19 18:59:38.589043 |
description | A collection of macros for generating fixed-size fixed-point numeric types for Rust. |
homepage | https://github.com/alygin/fdec |
repository | https://github.com/alygin/fdec |
max_upload_size | |
id | 422838 |
size | 192,745 |
A collection of macros for generating fixed-size fixed-point numeric types that exactly fit your domain. The types are fully equipped for performing mathematical computations and are easy to use.
With a simple macro call you get a type that:
+
, -
, *
, /
, %
, <<
, >>
,abs()
, powi()
, sqrt()
,You should probably give fdec a try if:
i256
or i1408
, which Rust doesn't provide,Add the dependency on fdec
to your Cargo.toml
:
[dependencies]
fdec = "0.3.1"
Import it at your crate's root with the macro_use
attribute:
#[macro_use]
extern crate fdec;
Add custom numeric types to your project by calling fdec*
macros:
fdec64! { // Use 64-bit units
module bigdec, // Put all the generated code into the `bigdec` module
name BigDec, // The name for the generated type
length 5, // 5 * 64-bit units = 320 bits to store numbers
scale 50 // Use 50 decimal places
}
Here we define the Decimal
structure that represents 160-bit numbers
with 30 decimal places.
#[macro_use]
extern crate fdec;
fdec32! { // Use 32-bit units
module dec, // Put all the generated code into the `dec` module
name Decimal, // Name the main struct `Decimal`
length 5, // 5 * 32-bit units = 160 bits to store numbers
scale 30 // Use 30 decimal places
}
use dec::*; // Bring the generated stuff to the scope
fn main() {
// Use it
let a = Decimal::one();
let b = Decimal::from(14);
let c = dec!(9);
let result = a + 30 * (b / c).powi(3);
println!("{} + 30 * ({} / {})^3 = {}", a, b, c, result);
// 1 + 30 * (14 / 9)^3 = 113.92181069958847736625514403278
}
More examples come with the crate's source code: