2 个版本

0.1.1 2023 年 1 月 4 日
0.1.0 2023 年 1 月 3 日

#316 in 值格式化

33 每月下载量

MIT 许可证

12KB
178

MIV - 处理罗马数字的Rust crate

这个crate用于将数字转换为罗马数字,并从罗马数字转换为数字,重点在于正确性。它只支持经典的罗马数字,这意味着它最多允许连续出现3个相同的数字。这意味着可以用罗马数字表示的最大数字是3999。考虑到罗马数字中不存在0的事实,这个crate只支持从1到3999的数字。

use roman::*;

let roman = Roman::from_string("XII").unwrap();
assert_eq!(roman.as_int(), 12);

let roman = Roman::from_integer(48).unwrap();
assert_eq!(roman.as_string(), String::from("XLVIII"));

MIV在解析罗马字符串时应用了严格规则。它试图确保传入的字符串实际上是一个有效的罗马数字,而不仅仅是一系列数字的集合。例如

let valid_143 = Roman::from_string("CXLIII");
assert_eq!(valid_143, Ok(Roman(143)));

let invalid_ten = Roman::from_string("IXI");
assert_eq!(invalid_ten, Err(Error::InvalidSequence(Roman::IX, Roman::I)));

let invalid_twenty = Roman::from_string("XVV");
assert_eq!(invalid_twenty, Err(Error::InvalidSequence(Roman::V, Roman::V)));
	
let ones_in_the_beginning = Roman::from_string("IIIX");
assert_eq!(ones_in_the_beginning, Err(Error::InvalidSequence(Roman::I, Roman::IX)));

它还具有其他安全措施,如一行中同一数字不得超过3个实例,不允许空字符串,不允许非罗马字符,不允许数字0。

依赖关系

~280–740KB
~17K SLoC