6 个版本
0.2.2 | 2022年3月20日 |
---|---|
0.2.1 | 2022年3月18日 |
0.1.2 | 2022年2月25日 |
#165 在 值格式化
514 每月下载量
55KB
1K SLoC
中文数字
根据《五经算术》,表示大于1,0000的数字时,有十个名称(亿、兆、京、垓、穰、壤、沟、涧、正、载)和三种系统(下数短尺度、中数中尺度、上数长尺度)。此外还有万尺度,其中每个名称代表比前一个大1,0000的数字,这个库可以将整数转换为四个尺度。
用法
添加到 Cargo.toml
[dependencies]
chinese-numerals = "0.2"
所有结构体都实现了 Display
特性的常规(带有 "{}"
)和替代(带有 "{:#}"
)格式,转换为小写和大写中文数字。此外,ChineseNumeral
特性提供以下功能
原始整数
对于每个尺度,都有一个结构体用于执行转换。
ShortScaleInt
实现了 From
特性,用于 i8
、u8
、i16
、u16
、i32
和 u32
,以及 TryFrom
特性,用于 i64
、u64
、i128
、u128
、isize
和 usize
。
MyriadScaleInt
、MidScaleInt
和 LongScaleInt
实现了 From
特性,用于所有基本整数。
示例
use chinese_numerals::{ChineseNumeral, ShortScaleInt, MidScaleInt};
let num = ShortScaleInt::from(1_0203_0405);
assert_eq!("一垓零二兆零三万零四百零五", format!("{}", num));
assert_eq!("壹垓零贰兆零叁万零肆佰零伍", format!("{:#}", num));
let num = MidScaleInt::from(1_0203_0405);
assert_eq!("一億零二百零三萬零四百零五", num.to_lowercase_trad());
assert_eq!("壹億零貳佰零叄萬零肆佰零伍", num.to_uppercase_trad());
大整数
对于除短尺度以外的尺度,实现了一个结构体,用于将 BigInt
和 BigUint
转换。
MyriadScaleBigInt
、MidScaleBigInt
和 LongScaleBigInt
实现了 TryFrom
特性,适用于 BigInt
和 BigUint
。
依赖项
要启用 bigint
功能,请在 Cargo.toml
中设置依赖项。
[dependencies]
num-bigint = "0.4"
chinese-numerals = { version = "0.2", features = ["bigint"] }
示例
use chinese_numerals::{ChineseNumeral, LongScaleBigInt};
use num_bigint::BigUint;
// 130_5480_5271_5637_0597_2964
let num = BigUint::new(vec![463665380, 3016835882, 707]);
let num = LongScaleBigInt::try_from(num).expect("Out of range");
assert_eq!(
"一百三十万五千四百八十兆五千二百七十一万\
五千六百三十七亿零五百九十七万二千九百六十四",
num.to_lowercase_simp()
);
依赖项
~120KB