#decimal #precision #numeric #fixed

decimal-rs

为Rust实现的高精度十进制

43个版本

0.1.43 2023年4月11日
0.1.42 2023年3月3日
0.1.41 2022年12月2日
0.1.40 2022年10月26日
0.1.0 2021年2月2日

#152 in 编码

Download history 1037/week @ 2024-03-14 959/week @ 2024-03-21 776/week @ 2024-03-28 641/week @ 2024-04-04 1084/week @ 2024-04-11 988/week @ 2024-04-18 768/week @ 2024-04-25 940/week @ 2024-05-02 738/week @ 2024-05-09 775/week @ 2024-05-16 944/week @ 2024-05-23 965/week @ 2024-05-30 489/week @ 2024-06-06 738/week @ 2024-06-13 953/week @ 2024-06-20 684/week @ 2024-06-27

2,938 每月下载量
3 crates 中使用

Apache-2.0

270KB
5.5K SLoC

decimal-rs

Apache-2.0 licensed Crate API

具有最高38位精度的十进制高精度实现。

功能标志

  • serde:当启用此可选依赖项时,Decimal 实现了 serde::Serializeserde::Deserialize 特性。

用法

要构建一个十进制数,使用 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");

从Rust原始类型构建十进制数

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));

十进制支持高精度算术运算。

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");

十进制可以编码为字节并从字节解码。

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版本

此版本的decimal-rs需要Rust 1.51或更高版本。

许可证

本项目采用Apache-2.0许可证(LICENSEhttp://www.apache.org/licenses/LICENSE-2.0)。

贡献

除非您明确声明,否则您提交给decimal-rs的任何有意贡献都应按Apache-2.0许可证许可,不附加任何额外条款或条件。

依赖项

~250KB