2 个版本
使用旧的 Rust 2015
0.1.1 | 2018年10月31日 |
---|---|
0.1.0 | 2018年10月2日 |
#224 在 值格式化
2,344 每月下载量
在 11 个 Crates 中使用 (3 直接使用)
140KB
2K SLoC
ECMAScript Number.toString Ryū
ryu crate 的分支,将安全的 API 改为实施在 ECMAScript 2015 Number Type 的 ToString 应用中指定的格式化规则。它应用了注释 2 到算法,并使用偶数舍入来确定 s * (10 ^ (n - k))
是否等于 m
。
原始 README (除徽章外) 以下。
Ryū,一种快速将浮点数转换为十进制字符串的算法的纯 Rust 实现。
PLDI'18 论文 Ryū: 快速浮点到字符串转换 由 Ulf Adams 撰写,包括该算法的完整正确性证明。该论文可在创意共享 CC-BY-SA 许可下获得。
此 Rust 实现是 Ulf Adams 用 C 实现的逐行移植,https://github.com/ulfjack/ryu。The ryu::raw
模块精确地暴露了 C 实现的 API 和格式,作为不安全的纯 Rust 函数。此外,还有以下示例代码中展示的安全 API。安全 API 使用相同的底层 Ryū 算法,但与 C 实现的格式化不同,以产生更易于阅读的输出,例如 0.3
而不是 3E-1
。
要求:此 crate 支持任何返回 rustc 1.15 的编译器版本;它不使用 Rust 标准库中的任何内容,因此可以从 no_std crates 中使用。
[dependencies]
ryu = "0.2"
示例
extern crate ryu;
fn main() {
let mut buffer = ryu::Buffer::new();
let printed = buffer.format(1.234);
assert_eq!(printed, "1.234");
}
性能
您可以使用上游的基准测试工具来运行
$ git clone https://github.com/ulfjack/ryu c-ryu
$ cd c-ryu
$ bazel run -c opt //ryu/benchmark
以及我们自己的基准测试工具来运行
$ git clone https://github.com/ulfjack/ryu rust-ryu
$ cd rust-ryu
$ cargo run --example benchmark --release
这些基准测试衡量打印32位浮点数的平均时间和打印64位浮点数的平均时间,输入为均匀随机位模式,宽度分别为32位和64位。
上游的C代码、不安全的直接Rust端口和安全的优雅Rust API表现相同,格式化32位浮点数大约需要21纳秒,格式化64位浮点数大约需要31纳秒。
许可证
您可以选择以下任一许可证。
- Apache许可证2.0版本(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- Boost软件许可证1.0版本(LICENSE-BOOST 或 https://boost.ac.cn/LICENSE_1_0.txt)