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