1
0
Code Issues Pull Requests Projects Releases Wiki Activity GitHub Gitee

添加numToChinese 数字转中文数字函数

This commit is contained in:
程序员小墨 2023-08-27 22:07:59 +08:00
parent e188b52a62
commit 87e38f5e26

View File

@ -0,0 +1,55 @@
/**
* 数字转中文数字
*
* 参考: https://www.jianshu.com/p/5927e5915ae4
* 在原文基础上有改动
*
* @param {*} num 输入的数字必须是正数或小数
* @returns 返回中文数字的字符串如果输入不合法则返回错误信息
*/
function numToChinese(num) {
// 检查输入是否是数字,如果不是则返回错误信息
if (!/^\d*(\.\d*)?$/.test(num)) {
console.error("数字错误!");
return null;
}
// 定义中文数字和单位的数组
var chineseDigits = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");
var chineseUnits = new Array("", "十", "百", "千", "万", "亿", "点", "");
// 将输入的数字去掉前导零,并且分割整数部分和小数部分
var parts = ("" + num).replace(/(^0*)/g, "").split("."),
digitIndex = 0, // 记录当前处理的位数
result = ""; // 存储结果字符串
// 从右往左遍历整数部分的每一位数字
for (var i = parts[0].length - 1; i >= 0; i--) {
switch (digitIndex) {
case 0: // 如果是个位数,则在结果字符串前加上空字符
result = chineseUnits[7] + result;
break;
case 4: // 如果是万位数,则在结果字符串前加上万字符,除非后面全是零
if (!new RegExp("0{4}\\d{" + (parts[0].length - i - 1) + "}$").test(parts[0]))
result = chineseUnits[4] + result;
break;
case 8: // 如果是亿位数,则在结果字符串前加上亿字符,并且重置位数和空字符
result = chineseUnits[5] + result;
chineseUnits[7] = chineseUnits[5];
digitIndex = 0;
break;
}
// 如果当前位数是百位或千位,并且后面有非零数字,但是前面是零,则在结果字符串前加上零字符
if (digitIndex % 4 == 2 && parts[0].charAt(i + 2) != 0 && parts[0].charAt(i + 1) == 0) result = chineseDigits[0] + result;
// 如果当前数字不是零,则在结果字符串前加上对应的中文数字和单位
if (parts[0].charAt(i) != 0) result = chineseDigits[parts[0].charAt(i)] + chineseUnits[digitIndex % 4] + result;
digitIndex++; // 增加位数计数器
}
// 如果有小数部分,则在结果字符串后加上"点",并且遍历小数部分的每一位数字,加上对应的中文数字
if (parts.length > 1) {
result += chineseUnits[6];
for (var i = 0; i < parts[1].length; i++) {
result += chineseDigits[parts[1].charAt(i)];
}
}
return result;
}
console.log(numToChinese(999999));