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

Download history 24/week @ 2024-03-31 7/week @ 2024-04-07 6/week @ 2024-04-14 9/week @ 2024-04-21 5/week @ 2024-04-28 2/week @ 2024-05-05 6/week @ 2024-05-12 3/week @ 2024-05-19 23/week @ 2024-05-26 10/week @ 2024-06-02 7/week @ 2024-06-09 13/week @ 2024-06-16 11/week @ 2024-06-23 22/week @ 2024-06-30 20/week @ 2024-07-07 12/week @ 2024-07-14

每月下载 66

MIT 许可证

19KB
401

Build Status Crate API

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_stringto_lowercaseto_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的数字进行转换时

无运行时依赖