数字转中文
作者:xie392地址:https://v.douyin.com/ieaCXeU3/更新时间:2024-12-21
案例代码
1/**2* 数字转中文,其中中文数字为简体3* @param {Number} num 万亿以下的数字4* @returns {String}5* @example6* numToChinese(12323400) // 一千二百三十二万三千四百7* numToChinese(1111) // 一千一百一十一8*/9function numToChinese(num) {10// 1、将数字转换为字符串,以万为单位分割11const numStr = num.toString().replace(/(?=(\d{4})+$)/g,',').split(',').filter(Boolean)1213const chars = ['零','一','二','三','四','五','六','七','八','九']14const units = ['','十','百','千']1516// 处理多个零的情况17function handleZreo(str) {18return str.replace(/零{2,}/g,'零').replace(/零+$/,'')19}2021// 转换四位数22function _transform(n) {23if(n === '0000') return chars[0]24let reslut = ''25for (let i = 0; i < n.length; i++) {26// 取出中文数字27let c = chars[+n[i]]28// 取出单位 个 十 百 千29let u = units[n.length - i - 1]30// 0 不加单位31if(c === chars[0]) {32u = ''33}34reslut += c + u35}36reslut = handleZreo(reslut)37return reslut38}3940const bigUnit = ['','万','亿']41let reslut = ''42// 2、转换每一部分,再加上单位43for (let i = 0; i < numStr.length; i++) {44const part = numStr[i]45const c = _transform(part)46let u = bigUnit[numStr.length - i - 1]47if(c === chars[0] ) {48u = ''49}50reslut += c + u51}52// 去除多余的零53reslut = handleZreo(reslut)54return reslut55}5657/**58* 数字转中文,且中文数字为繁体59*60* @param {*} num 万亿以下的数字61* @returns62*/63function toBeChineseNumber(num) {64const reslut = numToChinese(num)65const map = {66'零': '零',67'一': '壹',68'二': '贰',69'三': '叁',70'四': '肆',71'五': '伍',72'六': '陆',73'七': '柒',74'八': '捌',75'九': '玖',76'十': '拾',77'百': '佰',78'千': '仟',79'万': '万',80'亿': '亿',81}82return reslut.split('').map(s=>map[s]).join('')83}8485console.log(numToChinese('12323400')) // 一千二百三十二万三千四百86console.log(numToChinese('1111')) // 一千一百一十一87console.log(toBeChineseNumber('12340000123400')) // 壹拾贰叁仟肆佰亿零壹拾贰万叁仟肆佰
输出结果:
1一千二百三十二万三千四百2一千一百一十一3壹拾贰叁仟肆佰亿零壹拾贰万叁仟肆佰
目录