#decimal-number #decimal #safe-bindings #decnumber #finance #api-bindings

dec

提供对libdecnumber库的高级、安全绑定的十进制算术库

18次发布

0.4.9 2023年11月11日
0.4.8 2022年2月5日
0.4.7 2022年1月15日
0.4.5 2021年7月29日
0.3.3 2021年3月10日

#65 in 数学

Download history 4820/week @ 2024-04-03 4468/week @ 2024-04-10 3742/week @ 2024-04-17 2554/week @ 2024-04-24 2635/week @ 2024-05-01 3598/week @ 2024-05-08 3477/week @ 2024-05-15 3620/week @ 2024-05-22 4221/week @ 2024-05-29 3856/week @ 2024-06-05 3727/week @ 2024-06-12 3155/week @ 2024-06-19 3911/week @ 2024-06-26 3298/week @ 2024-07-03 3899/week @ 2024-07-10 2667/week @ 2024-07-17

14,444 每月下载量
用于 11 个crates (3 直接)

Apache-2.0

1MB
15K SLoC

C 10K SLoC // 0.4% comments Rust 5K SLoC // 0.0% comments

rust-dec

libdecnumber 对Rust编程语言的绑定。

dec crates.io

提供对libdecnumber库的高级、安全绑定的十进制算术库。

# Cargo.toml
[dependencies]
dec = "0.4.9"

查看文档。

decnumber-sys crates.io

对libdecnumber的低级绑定。

# Cargo.toml
[dependencies]
decnumber-sys = "0.1.5"

查看文档。


lib.rs:

dec是Rust的十进制算术库。

简介

来自 十进制算术常见问题解答

世界上大多数人都使用十进制(基10)算术。当需要大或小的值时,使用10的幂作为指数。然而,大多数计算机只有二进制(基2)算术,当使用指数时(在浮点数中),它们是2的幂。

二进制浮点数只能近似表示常见的十进制数。例如,0.1就需要一个无限循环的二进制分数。相比之下,十进制数系统可以精确表示0.1,即十分之一(即10^-1)。因此,二进制浮点数不能用于金融计算,或者确实不能用于任何需要结果与手工计算相匹配的计算。

dec是实现通用十进制算术标准的库,该标准精确地描述了有限精度浮点十进制算术和任意精度浮点十进制算术。

标准的最新草案可在网上找到,网址为 http://speleotrove.com/decimal/decarith.html。浮点算术还符合IEEE 754-2008规范,但该规范不可免费获得。

详细信息

dec是建立在C参考实现之上的安全Rust API,即 libdecnumber。在 decnumber-sys crate中提供了对libdecnumber的不安全C绑定。

此库公开的主要类型如下

  • Decimal32,一种32位十进制浮点表示形式,以压缩格式提供7位十进制精度的存储和交换,不支持任何算术函数。

  • Decimal64,一种64位十进制浮点表示形式,以压缩格式提供16位十进制精度的各种算术函数。

  • Decimal128,一种128位十进制浮点表示形式,以压缩格式提供34位十进制精度和各种算术函数。

  • Decimal,一种十进制表示形式,其精度可以通过其泛型参数 N 进行配置。

  • Context,它托管了上述类型上的大多数实际函数。上下文配置了各种操作的行为(例如,舍入模式)并累积异常条件(例如,溢出)。

示例

以下示例演示了库的基本用法

use dec::Decimal128;

let x: Decimal128 = ".1".parse()?;
let y: Decimal128 = ".2".parse()?;
let z: Decimal128 = ".3".parse()?;

assert_eq!(x + y, z);
assert_eq!((x + y + z).to_string(), "0.6");

依赖关系