通过 JavaScript 把数字的金额比如 12345
转成 中文的金额 一万二千三百四十五元
,要实现起来非常简单,其他的语言也是相同的道理,思路是一样的。
思路
- 获取长度,得到对应单位
- 截取第一个字符,得到中文的数字
- 循环以上操作
代码示例
为了方便,封装成一个函数
function money_number_to_chinese (num){
// 中文与数字对应数组
let chinese = ['零','一','二','三','四','五','六','七','八','九'];
// 长度与单位对应数组
let units = ['','十','百','千','万','十','百','千','亿','十','百','千','兆','十','百','千','万'];
// 结果字符串变量
let money = '';
// 把参数转成字符串操作
num = num + '';
// 循环开始
// 循环条件为 数字长度 大于0
while (num.length > 0){
// 拼接 中文数字 与 单位
money += chinese[num.slice(0,1)] + units[num.length - 1];
// 去掉已经计算过第一个的数字
num = num.slice(1);
}
// 返回金额
return money + '元';
}
测试:
money_number_to_chinese(123456)
// 一万二千三百四十五元
但是遇到后面是零的,会出现 零十 零百 这样的情况,所以还可以继续优化
优化 (零十 零百 零万 .. 情况)
思路是判断后面数字都是0的情况,做不输出的操作。
但是万、亿、兆是重要单位不能被忽略
function money_number_to_chinese (num){
if (!num){
return '零元';
}
let chinese = ['零','一','二','三','四','五','六','七','八','九'];
let units = ['','十','百','千','万','十','百','千','亿','十','百','千','兆','十','百','千','万'];
let money = '';
num = num + '';
while (num.length > 0){
// 如果数字 不等于 0 继续转换数字和单位
if (num != 0){
money += chinese[num.slice(0,1)] + units[num.length - 1];
}
// 如果数字等于0 并且 是 万 亿 兆 这样的重要单位 就 保留 单位 num为空 结束循环
if (num == 0 && (num.length == 4 || num.length == 9 || num.length == 13)){
money += units[num.length - 2];
num = '';
}else{
// 否则 去掉计算过的数字 继续循环
num = num.slice(1);
}
}
return money + '元';
}
测试:
money_number_to_chinese(123000000000);
// 一千二百三十亿
还有一些细节可以自行完善,这个代码最多只支持 万兆 可以做判断限制,或者结合自己的程序需要做一些处理。
还有一个细节是 在js中,字符串 "000"
== 0 ,在其他语言中可能不一样,只需要做另外处理就行,主要判断是否后面都是0,也可以用正则做判断。
原创内容,不要转载,欢迎评论区互动。