#percentage #decimal #precision #high #rust-decimal

decimal-percentage

Percentage type with rust_decimal

4 releases

0.1.4 Dec 7, 2023
0.1.3 Aug 18, 2021
0.1.2 Mar 17, 2021
0.1.1 May 21, 2020
0.1.0 May 21, 2020

#2 in #percentage

Download history 85/week @ 2023-12-23 1125/week @ 2023-12-30 2422/week @ 2024-01-06 1896/week @ 2024-01-13 2144/week @ 2024-01-20 1420/week @ 2024-01-27 1800/week @ 2024-02-03 1710/week @ 2024-02-10 1451/week @ 2024-02-17 2868/week @ 2024-02-24 3367/week @ 2024-03-02 3088/week @ 2024-03-09 3043/week @ 2024-03-16 2711/week @ 2024-03-23 2485/week @ 2024-03-30 2378/week @ 2024-04-06

11,225 downloads per month
Used in 2 crates

MIT license

14KB
243 lines

Percentage Type with Decimal

Build Status MIT Licensed Crates.io decimal-percentage

A type to represent percentage with high precision thanks to rust_decimal.

A percentage can perform addition, subtraction and multiplication.

use decimal_percentage::Percentage;
use rust_decimal::Decimal;

let p1 = Percentage::from(0.1f64);
let p2 = Percentage::from(0.1f32);
let p3 = Percentage::try_from("0.1").unwrap();
let p4 = Percentage::from(Decimal::from_f64(0.3).unwrap());

assert_eq!(p1 + p2, Percentage::from(0.2));
assert_eq!(p1 + 0.2, Percentage::from(0.3));
assert_eq!(p4 - p2, Percentage::from(0.2));
assert_eq!(p1 * 66.0, 6.6);
assert_eq!(p1 * 100u32, 10u32);
assert_eq!(p1 * -100i32, -10i32);
// note that a multiplication to integer type can lose precision
assert_eq!(p1 * -33i32, -3i32);
// multiplication on extremely small value with Decimal,
// that is not representable with float point
let small_value = Decimal::from_str("0.0000000000000000002").unwrap();
assert_eq!(p1 * small_value, Decimal::from_str("0.00000000000000000002").unwrap());

Contributing

Contributions and feed back are welcome following Github workflow.

License

decimal_percentage is provided under the MIT license. See LICENSE.

Dependencies

~1–1.6MB
~35K SLoC