digitsToTextFn(numM) { // 只能精确到亿
var arr = []
var num = Number(numM) * 100 // 加入了分和角
// 定义区分正负的标识 初始值为0 负数为1
var moneyFlag = 0
if (num < 0) {
moneyFlag = 1
// 将负数转化为整数进行while循环
num = num * -1
}
var k = 0
while (num >= 1) {
if (k === 0) {
arr.unshift('分')
} else if (k === 1) {
arr.unshift('角')
} else if (k === 2) {
arr.unshift('元')
} else if (k === 3) {
arr.unshift('拾')
} else if (k === 4) {
arr.unshift('佰')
} else if (k === 5) {
arr.unshift('仟')
} else if (k === 6) {
arr.unshift('万')
} else if (k === 7) {
arr.unshift('拾')
} else if (k === 8) {
arr.unshift('佰')
} else if (k === 9) {
arr.unshift('仟')
} else if (k === 10) {
arr.unshift('亿')
}
arr.unshift(num % 10)
num = Math.floor(num / 10)
k++
}
// 在文字起始位置插入负
if (moneyFlag === 1) {
arr.unshift('负')
}
arr.unshift('人名币')
// 将金额中不连贯的 2040 贰仟四十元 中间插入零 贰仟零四十元
arr.forEach((item, index) => {
if (item !== 0 && arr[index + 2] === 0 && arr[index + 4] !== 0) {
// item 当前数字 arr[index + 2]当前文字对应的下一个数字 arr[index + 4]当前文字对应的下下一个数字 只要两个不为零的数字中间的数字为零就要插入零
// 将0变为S 这个元素不会被过滤掉 D会被过滤掉
arr[index + 2] = 'S'
arr[index + 3] = 'D'
}
})
// 去掉金额中没有意义数字0和文字零
// 如果数字为0 则将对应的文字零变为 'D' 在后面将处理过的'D'过滤掉
arr.forEach((item, index) => {
// arr.length - 12 对应文字仟的数字0
// arr.length - 14 对应文字万的数字0
// arr.length - 21 对应文字亿的数字0
if (item === 0 && arr.length - 12 <= index) arr[index + 1 ] = 'D' // 处理万位之前的0 个十百千
else if (item === 0 && arr.length - 14 > index && arr.length - 20 < index) arr[index + 1 ] = 'D' // 处理万位之后的亿位之前的0
})
const newArr = arr.filter(item => item !== 0 && item !== 'D') // 过滤掉无效的0和D
if (newArr[newArr.length - 1] !== '元' && newArr[newArr.length - 1] !== '角' && newArr[newArr.length - 1] !== '分') newArr.push('元整')
if (newArr[newArr.length - 1] === '元') newArr.push('整')
var str = newArr.join('')
str = str.replace(',')
str = str.replace(/1/g, '壹')
str = str.replace(/2/g, '贰')
str = str.replace(/3/g, '叁')
str = str.replace(/4/g, '肆')
str = str.replace(/5/g, '伍')
str = str.replace(/6/g, '陆')
str = str.replace(/7/g, '柒')
str = str.replace(/8/g, '捌')
str = str.replace(/9/g, '玖')
str = str.replace(/0/g, '零')
str = str.replace(/S/g, '零')
return str
},
金额数字转文字
于 2023-07-14 18:17:47 首次发布