43 releases
0.1.43 | Apr 11, 2023 |
---|---|
0.1.42 | Mar 3, 2023 |
0.1.41 | Dec 2, 2022 |
0.1.40 | Oct 26, 2022 |
0.1.0 | Feb 2, 2021 |
#150 in Encoding
6,182 downloads per month
Used in 3 crates
270KB
5.5K
SLoC
decimal-rs
High precision decimal with maximum precision of 38.
Feature Flags
serde
: When this optional dependency is enabled,Decimal
implements theserde::Serialize
andserde::Deserialize
traits.
Usage
To build a decimal, use Decimal
:
use decimal_rs::Decimal;
let n1: Decimal = "123".parse().unwrap();
let n2: Decimal = "456".parse().unwrap();
let result = n1 + n2;
assert_eq!(result.to_string(), "579");
To build a decimal from Rust primitive types:
use decimal_rs::Decimal;
let n1 = Decimal::from(123_i32);
let n2 = Decimal::from(456_i32);
let result = n1 + n2;
assert_eq!(result, Decimal::from(579_i32));
Decimal supports high precision arithmetic operations.
use decimal_rs::Decimal;
let n1: Decimal = "123456789.987654321".parse().unwrap();
let n2: Decimal = "987654321.123456789".parse().unwrap();
let result = n1 * n2;
assert_eq!(result.to_string(), "121932632103337905.662094193112635269");
Decimal can be encoded to bytes and decoded from bytes.
use decimal_rs::Decimal;
let n1 = "123456789.987654321".parse::<Decimal>().unwrap();
let mut bytes = Vec::new();
n1.encode(&mut bytes).unwrap();
let n2 = Decimal::decode(&bytes);
assert_eq!(n1, n2);
Rust Version
This version of decimal-rs
requires Rust 1.51 or later.
License
This project is licensed under the Apache-2.0 license (LICENSE or http://www.apache.org/licenses/LICENSE-2.0).
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in decimal-rs
by you, shall be licensed as Apache-2.0, without any additional
terms or conditions.
Dependencies
~240KB