数字用计算机语言怎么表示,如何用Rust编程语言进行中文数字的转换?

「中文数字」是中文的数字表示方式,例如「123」,可以表示为「一百二十三」。中文数字如同英文本母一样有区分大小写,例如「123」的中文数字小写为「一百二十三」,大写则为「壹佰贰拾参」。至於单位则有个、十、百、千、万、亿、兆、京等等,相同单位的数量级也并非只有一种,而是分为下数、万进、中数和上数这主要四种系统。中文数字是老祖宗的智能,但对于现在的数字系统来说并不怎么合适,还是得经过转换才行。那么要如何使用Rust编程语言进行中文数字的转换呢?

在进入Rust编程语言之前,先来了解一下下数、万进、中数和上数四种进位系统。北周甄鸾所作的《五经算术》有提到:

按黄帝为法,数有十等。及其用也,乃有三焉。十等者,谓「亿、兆、京、垓、秭、壤、沟、涧、正、载」也。三等者,谓「上、中、下」也。其下数者,十十变之。若言十万曰亿,十亿曰兆,十兆曰京也。中数者,万万变之。若言万万曰亿,万万亿曰兆,万万兆曰京也。上数者,数穷则变。若言万万曰亿,亿亿曰兆、兆兆曰京也。

拿「一兆」来举例的话,下数的「一兆」对应的数值为1000000(106);中数的「一兆」对应的数值为10000000000000000(1016);上数的「一兆」对应的数值同中数的「一兆」。以「一京」来举例的话,下数的「一京」对应的数值为107;中数的「一京」对应的数值为1016;上数的「一京」对应的数值为1032。

而我们平常使用的进位系统为「万进」,一遇到「万」就变,因此万进的「一兆」对应的数值为1000000000000(1012),「一京」对应的数值为1016。

Chinese Number

「Chinese Number」是笔者开发的套件,提供了ChineseNumber特性,可以将Rust编程语言的所有基本数值类型都拥有转成中文数字的能力。也提供ChineseNumberToNumber特性,让中文数字的字符串可以转成Rust编程语言的基本数值类型。这个套件除了有支持下数、万进、中数和上数这四种进位系统外,还支持繁体字和简体字的大小写。

Crates.io

Cargo.toml

chinese-number = "*"

使用方法

数值转中文数字

利用use关键字将chinese_number这个crate底下的ChineseNumber特性给引入到目前的程序范围下,Rust编程语言的所有基本数值就会拥有to_uppercase_high、to_uppercase_middle、to_uppercase_ten_thousand、to_uppercase_low、to_lowercase_high、to_lowercase_middle、to_lowercase_ten_thousand、to_lowercase_low这几种方法,能够传入要使用的中文变体(即繁体字或简体字),将基本数值转成中文数字,并保存到String结构实体中。如果要将结果输出到已存在的String结构实体,可以使用它们对应的以_to_string为名称后缀的方法,例如to_uppercase_high_to_string方法。

转换的程序如下:

extern crate chinese_number;

use chinese_number::{ChineseNumber, ChineseVariant};

assert_eq!("壹佰贰拾参", 123i8.to_uppercase_ten_thousand(ChineseVariant::Traditional));

assert_eq!("壹佰贰拾参", 123i8.to_uppercase_ten_thousand(ChineseVariant::Simple));

assert_eq!("一百二十三", 123i8.to_lowercase_ten_thousand(ChineseVariant::Traditional));

中文数字转数值

利用use关键字将chinese_number这个crate底下的ChineseNumberToNumber特性给引入到目前的程序范围下,Rust编程语言的String结构实体和字符串切片就会拥有parse_chinese_number方法,能够传入要使用的进位系统,将中文数字字符串转成Rust编程语言内的任意基本数值。

转换的程序如下:

extern crate chinese_number;

use chinese_number::{ChineseNumberToNumber, ChineseNumberCountMethod};

assert_eq!(123i8, "一百二十三".parse_chinese_number(ChineseNumberCountMethod::TenThousand).unwrap());

assert_eq!(-30303i16, "负三万零三百零三".parse_chinese_number(ChineseNumberCountMethod::TenThousand).unwrap());

assert_eq!(3212345678u32, "三十二亿一千二百三十四万五千六百七十八".parse_chinese_number(ChineseNumberCountMethod::TenThousand).unwrap());

assert_eq!(10010001001001001000u64, "一千零一京零一兆零一十亿零一百万一千".parse_chinese_number(ChineseNumberCountMethod::TenThousand).unwrap());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值