5 个版本 (3 个稳定版)
1.1.0 | 2021年1月26日 |
---|---|
1.0.1 | 2018年11月29日 |
0.9.1 | 2018年11月20日 |
0.9.0 | 2018年11月20日 |
在 值格式化 中排名第 137
每月下载 66 次
19KB
401 行
Septem
一个用于解析和操作罗马数字的库。
支持从字符串或数字到罗马数字的简单转换,以及简单的反向转换。
用法
extern crate septem;
use septem::{Roman};
let sept: Roman = "vii".parse().unwrap();
assert_eq!(7, *sept);
assert_eq!("VII", sept.to_string());
assert_eq!("vii", sept.to_lowercase());
需要使用 use septem::prelude::*
以支持 std::str::{FromStr}
特性和 Roman::from_str
函数。
extern crate septem;
use septem::prelude::*;
use septem::{Roman};
let roman = Roman::from_str("dxxxii").unwrap();
assert_eq!(532, *roman);
转换为罗马数字
使用 Rust 的 FromStr
特性提供字符串解析。
let num: Roman = "XLII".parse().unwrap();
使用 Roman::from
进行整数解析。
let num: Roman = Roman::from(42).unwrap();
从罗马数字转换
可以使用 Rust 的 Display
特性获取罗马数字的字符串表示。
println!("Roman number: {}", Roman::from(42).unwrap());
也有函数可以直接获取字符串,而不通过格式化器;to_string
,to_lowercase
和 to_uppercase
。
let dis = Roman::from(42).unwrap().to_string();
罗马数字的数值可以通过 Rust 的 Deref
特性获得。
let roman = Roman::from(42).unwrap();
assert_eq!(42, *roman);
数字
如果您需要处理构成罗马数字的数字,可以使用 to_digits
函数获取这些数字。
let roman = Roman::from(42).unwrap();
roman.to_digits().iter().for_each(|i| {
println!("digit: {}", i);
});
性能
提供了从罗马数字字符串形式转换为整数,以及相反方向的基准测试。与其他几个罗马数字库的测试表明,这个crate的性能与替代方案相当,或略快。毕竟,快速进行罗马数字转换非常重要,不能让程序的重要部分运行缓慢!
目前无法在稳定版Rust上运行基准测试,因此应使用以下命令运行:
$ cargo +nightly bench
错误
Septem函数可以返回三种类型的错误
InvalidDigit(char)
,当字符无法解析为罗马数字时InvalidNumber(u64)
,当数字无法解析为单个罗马数字时OutOfRange(u32)
,当尝试将小于或等于0
或大于3999
的数字进行转换时