阿拉伯数字转化为汉字繁体大写(财务金额大写)和汉字小写解决方案
/** * 将阿拉伯整数转化成汉字小写 支持12位整数 * @param n 为整数型 number 或者 string * @param customText 字符串 * @returns {string} */ function numToChinese(n,customText='我是默认字符串:') { if (n === 0) { return '零' } if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) { return '格式错误' } n = parseInt(n) // 转化为整型 if (n.toString().length > 12) { return '数据超出解析范围' } let unit = '千百十亿千百十万千百十个', str = ''; n += '' let p = n.length // 获取整数部分长度 if (p >= 0) { n = n.substring(0, p) + n.substr(p + 1, 0) } unit = unit.substr(unit.length - n.length) for (let i = 0; i < n.length; i++){ str += '零一二三四五六七八九'.charAt(n.charAt(i)) + unit.charAt(i) } let result = customText + str .replace(/零(千|百|十)/g, '零') .replace(/(零)+/g, '零') .replace(/零(万|亿|个)/g, '$1') .replace(/(亿)万/g, '$1$2') .replace(/^个零?/g, '') .replace(/个$/g, '') // 去掉末尾的零 if (result.charAt(result.length - 1) == '零') { result = result.substring(0, result.length - 1) } return result }
/** * 数字转换中文繁体大写 支持12位整数 * @param n number数值 或者string数值 类型 * @returns {string} */ function numToTraditionalChinese(n) { if (n === 0) { return '零' } if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) { return '格式错误' } let unit = '仟佰拾亿仟佰拾万仟佰拾元角分', str = '' n += '00' let p = n.indexOf('.') // 获取整数部分长度 if ((p == -1 && n.toString().length > 12) || (p !== -1 && p > 12)) { return '数据超出解析范围' } if (p >= 0) { n = n.substring(0, p) + n.substr(p + 1, 2) // 截取整数部分和小数点后两位 整合成新整数 } unit = unit.substr(unit.length - n.length) for (let i = 0; i < n.length; i++) { str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i) } return str .replace(/零(仟|佰|拾|角)/g, '零') .replace(/(零)+/g, '零') .replace(/零(万|亿|元)/g, '$1') .replace(/(亿)万/g, '$1$2') .replace(/^元零?|零分/g, '') .replace(/元$/g, '元整') } console.log(numToTraditionalChinese(111020000000.03331)) // 壹仟壹佰壹拾亿贰仟万元零叁分 console.log(numToChinese(11102000000.55,'方法号:')) // 方法号:一百一十一亿零二百万