/**
* 将阿拉伯整数转化成汉字小写 支持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,'方法号:')) // 方法号:一百一十一亿零二百万