数字金额转大写
/**
* description 数字转换成大写
* params: val => number
*/
function translateNumber(val) {
if (!Number(val) || !val) return 0
let num = 0
let copyNum = []
if (String(val).includes('.')) { // 存在小数点的情况
copyNum = String(val).split('.')
num = Number(copyNum[0])
} else {
num = Number(val)
}
const numStr = Number((num + '').replace(/[,,]*/g, '')) + ''
num = parseInt(Number(numStr)) // 转为整数
let capitalArr = '零壹贰叁肆伍陆柒捌玖拾'
let unitArr = ['拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟'] // 单位
const resArr = [] // 记录结果,后边json.in就可
let index = numStr.length - 1 //记录位数
let idu = 0 // 记录单位
let decade = 10
const capitalUp = (num, decade, index) => {
const unit = num / decade
const capital = capitalArr[Number(numStr[index])]
if (unit < 1) {
resArr.push(capital)
// 出现一十一这种情况
if (Number(numStr[index]) === 1 && (numStr.length === 2 || numStr.length === 6 || numStr.length === 10)) {
resArr.pop()
}
return false
} else {
if (capital === '零') {
// 万、亿单位不删除
if (!['万', '亿'].includes(resArr[resArr.length - 1])) {
resArr.pop()
}
// 前面有零再删掉一个零
if (resArr[resArr.length - 1] === '零') {
resArr.pop()
}
}
resArr.push(capital)
// 过滤存在 零万、零亿 这种情况
if (['万', '亿'].includes(resArr[resArr.length - 2]) && capital === '零') {
resArr.pop()
}
// 过滤 1亿万 这种情况
if (resArr[0] === '万' && resArr[1] === '亿') {
resArr.shift()
}
// 末尾 零 删掉
if (resArr[0] === '零') {
resArr.pop()
}
resArr.push(unitArr[idu++])
capitalUp(num, decade * 10, --index)
}
}
capitalUp(num, decade, index)
let afterBox = []
if (copyNum.length) { // 拼接角和分
const strAfter = copyNum[1].substring(0, 2).split('')
strAfter.forEach((i, index) => {
const shuZhi = capitalArr[Number(i)]
if (index === 0) {
if (shuZhi !== '零') {
afterBox.push(shuZhi)
afterBox.push('角')
}
} else if (index === 1) {
if (shuZhi !== '零') {
afterBox.push(shuZhi)
afterBox.push('分')
}
}
})
}
return resArr.reverse().join('') + '元' + afterBox.join('')
}
标签:index,numStr,Number,大写,num,let,发票,resArr,小数
From: https://www.cnblogs.com/lutwelve/p/17588578.html