添加numToChinese 数字转中文数字函数
This commit is contained in:
		
							
								
								
									
										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));
 | 
				
			||||||
		Reference in New Issue
	
	Block a user