#numeral #chinese #numbers #convert #scale #big-int #short

chinese-numerals

将数字转换为中文数字

6 个版本

0.2.2 2022年3月20日
0.2.1 2022年3月18日
0.1.2 2022年2月25日

#165值格式化

Download history 3/week @ 2024-03-09 18/week @ 2024-03-30 8/week @ 2024-04-06

514 每月下载量

AGPL-3.0-or-later

55KB
1K SLoC

中文数字

将原始整数和 大整数 转换为 中文数字

根据《五经算术》,表示大于1,0000的数字时,有十个名称(亿、兆、京、垓、穰、壤、沟、涧、正、载)和三种系统(下数短尺度、中数中尺度、上数长尺度)。此外还有万尺度,其中每个名称代表比前一个大1,0000的数字,这个库可以将整数转换为四个尺度。

用法

添加到 Cargo.toml

[dependencies]
chinese-numerals = "0.2"

所有结构体都实现了 Display 特性的常规(带有 "{}")和替代(带有 "{:#}")格式,转换为小写和大写中文数字。此外,ChineseNumeral 特性提供以下功能

原始整数

对于每个尺度,都有一个结构体用于执行转换。

ShortScaleInt 实现了 From 特性,用于 i8u8i16u16i32u32,以及 TryFrom 特性,用于 i64u64i128u128isizeusize

MyriadScaleIntMidScaleIntLongScaleInt 实现了 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());

大整数

对于除短尺度以外的尺度,实现了一个结构体,用于将 BigIntBigUint 转换。

MyriadScaleBigIntMidScaleBigIntLongScaleBigInt 实现了 TryFrom 特性,适用于 BigIntBigUint

依赖项

要启用 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