阿拉伯数字转中文数字脚本。
#!/bin/bash
# 阿拉伯数字转换成中文数字(最大支持到9 9999 9999 9999 9999(17位)),限制阿拉伯数字必须为整数。
# 设置一个 num2cn 函数,阿拉伯数字转中文数字。
num2cn() {
# 如果没有传入参数,则退出该函数而非脚本,这个错误代码。如果执行该函数之后还执行其他命令则该错误代码无法通过 $? 查询到。
[ -z ${1} ] && echo "未输入参数,退出!" && return 1
# 判断你输入的是否为一个整数,非整数时退出该函数。
echo "${1}" | grep '[^0-9]' &>/dev/null && echo "你输入的不是一个整数(${1}), 退出!" && return 2
num=${1}
# 定义 num_cn_array 数组,0 位对应 零 ; 1 对应 一 2 对应 二 ; 以此类推。
local num_cn_array=(零 一 二 三 四 五 六 七 八 九)
# 定义 num_units_array 数组,赋予 个位 对应 ""(空) ; 百位 对应 百 ; 千位 对应 千 ;以此类推。
local num_units_array=("" 十 百 千 万 十 百 千 亿 十 百 千 兆 十 百 千 京)
# 统计输入的数字有多少位,用于下面的循环,有多少位循环多少次。
char_length=$(expr length ${num}) ; [ ${char_length} -gt 17 ] && echo "输入的数字太大,超过17位,退出!" && return 3
# 定义变量(a=0)用于循环取输入输入数字的第N位数字。
local a=0
for ((i=${char_length};i>=1;i--))
do
# 循环一次变量的值加一,取数字从左边(最高位)开始第N位数字。
let a++
# 因为数组是从零开始的而i是从1开始的,所以变量(i)的值减一。便于后面取出第N位对应的数字单位,从最高位开始到个位("")。
local num_units_temp=$((i - 1))
# 取出 $num 第 $a 位值的数字赋予变量(num_temp),从最高位位开始到个位。
local num_temp=$(echo $num | cut -c $a)
# 把 num_cn_array 数组的第 $num_temp 位的值 和 num_units_array 数组的第 $num_units_temp 位的值 组合到一起赋予给变量(num_cn_temp)。
local num_cn_temp=${num_cn_array[$num_temp]}${num_units_array[num_units_temp]}
# 每循环一次,把 $num_cn_temp_2 的值和 $num_cn_temp 的值组合到一起赋予该变量 num_cn_temp_2 。 因为是从高位开始的所以 num_cn_temp_2 在前,num_cn_temp 在后。
local num_cn_temp_2=${num_cn_temp_2}${num_cn_temp}
unset num_cn_temp
done
num_cn=${num_cn_temp_2}
echo "你输入的阿拉伯数字:${num} 对应的中文数字为: ${num_cn} 。"
}
# 测试
num2cn 99999999999999999
while true
do
read -p "请输入整数, (如需退出输入 \"bye\" 。):" test_num
[ "${test_num}" == "bye" ] && exit 0
num2cn $test_num
done
注:该脚本有缺陷,当数字中有0时可能会出现歧义。
[root@10 ~]# sh shdir/test.sh
你输入的阿拉伯数字:99999999999999999 对应的中文数字为: 九京九千九百九十九兆九千九百九十九亿九千九百九十九万九千九百九十九 。
请输入整数, (如需退出输入 "bye" 。):100
你输入的阿拉伯数字:100 对应的中文数字为: 一百零十零 。
请输入整数, (如需退出输入 "bye" 。):101
你输入的阿拉伯数字:101 对应的中文数字为: 一百零十一 。
请输入整数, (如需退出输入 "bye" 。):bye
[root@10 ~]#
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。