添加numToChinese 数字转中文数字函数
This commit is contained in:
parent
e188b52a62
commit
87e38f5e26
55
tools/numToChinese 数字转中文数字.js
Normal file
55
tools/numToChinese 数字转中文数字.js
Normal 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));
|
Loading…
Reference in New Issue
Block a user