30 个版本 (19 个稳定版)

1.0.18 2024年5月7日
1.0.17 2024年2月19日
1.0.16 2023年12月9日
1.0.15 2023年7月15日
0.1.1 2018年7月28日

#17值格式化

Download history 2773164/week @ 2024-05-02 2813241/week @ 2024-05-09 2844318/week @ 2024-05-16 2707722/week @ 2024-05-23 2940762/week @ 2024-05-30 2832251/week @ 2024-06-06 3064247/week @ 2024-06-13 2879794/week @ 2024-06-20 2761299/week @ 2024-06-27 2611715/week @ 2024-07-04 2868924/week @ 2024-07-11 2888730/week @ 2024-07-18 2872469/week @ 2024-07-25 2975506/week @ 2024-08-01 3249859/week @ 2024-08-08 2601278/week @ 2024-08-15

12,232,831 每月下载量
用于 52,000 个crate(154 个直接使用)

Apache-2.0 OR BSL-1.0

115KB
2K SLoC

Ryū

github crates.io docs.rs build status

Ryū 的纯 Rust 实现,Ryū 是一种快速将浮点数转换为十进制字符串的算法。

PLDI'18 论文 Ryū: 快速浮点到字符串转换 由 Ulf Adams 编写,包括该算法的完整正确性证明。该论文可在 creative commons CC-BY-SA 许可下获取。

此 Rust 实现是 Ulf Adams 用 C 实现的逐行移植,https://github.com/ulfjack/ryu

要求:此crate支持任何回到 rustc 1.36 的编译器版本;它不使用 Rust 标准库中的任何内容,因此可以从 no_std crate 中使用。

[dependencies]
ryu = "1.0"

示例

fn main() {
    let mut buffer = ryu::Buffer::new();
    let printed = buffer.format(1.234);
    assert_eq!(printed, "1.234");
}

性能(越低越好)

performance

您可以使用以下命令运行上游的基准测试

$ git clone https://github.com/ulfjack/ryu c-ryu
$ cd c-ryu
$ bazel run -c opt //ryu/benchmark:ryu_benchmark

使用以下命令对同一基准测试进行与我们的实现的比较

$ git clone https://github.com/dtolnay/ryu rust-ryu
$ cd rust-ryu
$ cargo run --example upstream_benchmark --release

这些基准测试测量打印 32 位浮点数的平均时间以及打印 64 位浮点数的平均时间,其中输入是 32 位和 64 位宽的均匀随机位模式。

上游 C 代码、不安全的直接 Rust 移植和安全的 Rust API 都表现相同,格式化 32 位浮点数大约需要 21 纳秒,格式化 64 位浮点数大约需要 31 纳秒。

还有 Rust 特定的基准测试,比较此实现与标准库,您可以使用以下命令运行

$ cargo bench

基准测试表明,在 f32 和 f64 输入的范围内,Ryū 比标准库快约 2-5 倍。测量结果为每次迭代的纳秒数;越小越好。

格式化

此库通常比标准库的 to_string 产生更易于阅读的输出,后者从不使用科学记数法。以下有两个示例

  • ryu: 1.23e40, std: 12300000000000000000000000000000000000000
  • ryu: 1.23e-40, std: 0.000000000000000000000000000000000000000123

两个库都打印不带科学记数法的短小数,例如0.0000123。


许可证

根据您的选择,该库受以下任一许可证的许可:Apache许可证2.0版本Boost软件许可证1.0版本
除非您明确声明,否则您有意提交以包含在此crate中的任何贡献,如Apache-2.0许可证所定义,应按上述方式双重许可,不附加任何额外的条款或条件。

依赖关系