共计 3073 个字符,预计需要花费 8 分钟才能阅读完成。
写得比拟累赘,见谅
// 解析开票金额
function encodeAmount(data) {
let uppercase = '' // 大写
let init = String(data).split('.')[0] // 整数长度
let double = String(data).split('.')[1] // 小数局部
let str = String(init)
let strSecation = [] // 数字段
let n = 4
for (let i = 0, l = str.length; i < l / n; i++) {
strSecation.push(
str
.split('')
.reverse()
.join('')
.slice(n * i, n * (i + 1))
.split('')
.reverse()
.join('')
)
}
let resArr = zhuanhuan(strSecation)
uppercase = deRepeat(resArr)
uppercase = double * 100 > 0 ? uppercase + doubleEncode(double) : uppercase + '整'
return uppercase;
}
// 小数转译
function doubleEncode(doubleNumber) {
let encodeMac = [{ type: '0', value: '零'},
{type: '1', value: '壹'},
{type: '2', value: '贰'},
{type: '3', value: '叁'},
{type: '4', value: '肆'},
{type: '5', value: '伍'},
{type: '6', value: '陆'},
{type: '7', value: '柒'},
{type: '8', value: '捌'},
{type: '9', value: '玖'},
]
let res = ''let doubleStirng = String(doubleNumber).length == 2 ? String(doubleNumber) :'0' + String(doubleNumber)
doubleStirng.split('').map((dItem, index) => {encodeMac.map((item) => {dItem == item.type && index == 0 ? (res += item.value + '角') : ''dItem == item.type && index == 1 && dItem !=='0'? (res += item.value +' 分 ') :''
})
})
return res
}
// 整数调整
function deRepeat(Arr) {
let resEnd = ''
for (let k of Arr) {if (k.indexOf('零零零亿') > -1) {resEnd += k.replace(/ 零零零亿 /g, '亿')
} else if (k.indexOf('零零零万') > -1) {resEnd += k.replace(/ 零零零万 /g, '万')
} else if (k.indexOf('零零零圆') > -1) {resEnd += k.replace(/ 零零零圆 /g, '圆')
} else if (k.indexOf('零零亿') > -1) {resEnd += k.replace(/ 零零亿 /g, '亿')
} else if (k.indexOf('零零万') > -1) {resEnd += k.replace(/ 零零万 /g, '万')
} else if (k.indexOf('零零圆') > -1) {resEnd += k.replace(/ 零零圆 /g, '圆')
} else if (k.indexOf('零亿') > -1) {resEnd += k.replace(/ 零亿 /g, '亿')
} else if (k.indexOf('零万') > -1) {resEnd += k.replace(/ 零万 /g, '万')
} else if (k.indexOf('零圆') > -1) {resEnd += k.replace(/ 零圆 /g, '圆')
} else if (k.indexOf('零零零') > -1) {resEnd += k.replace(/ 零零零 /g, '零')
} else if (k.indexOf('零零') > -1) {resEnd += k.replace(/ 零零 /g, '零')
} else {resEnd += k}
}
if (resEnd.indexOf('亿万圆') > -1) {resEnd = resEnd.replace(/ 亿万圆 /g, '亿圆')
}
return resEnd
}
// 整数转译
function zhuanhuan(arr) {let res = []
let encodeMac = [{ type: '0', value: '零'},
{type: '1', value: '壹'},
{type: '2', value: '贰'},
{type: '3', value: '叁'},
{type: '4', value: '肆'},
{type: '5', value: '伍'},
{type: '6', value: '陆'},
{type: '7', value: '柒'},
{type: '8', value: '捌'},
{type: '9', value: '玖'},
]
let unit = [{ type: 1, value: ''},
{type: 2, value: '拾'},
{type: 3, value: '佰'},
{type: 4, value: '仟'},
{type: 5, value: '万'},
{type: 6, value: '拾万'},
{type: 7, value: '佰万'},
{type: 8, value: '仟万'},
{type: 9, value: '亿'},
]
for (let arrK in arr) {let initStrArr = arr[arrK].split('').reverse()
let initStr = []
initStrArr.map((item, index) => {if (index === 0) {initStr.push(String(item))
} else {initStr.push(String(item * 10 ** index))
}
})
initStr = initStr.reverse()
let paramsArr = []
for (let v of initStr) {let fir = v.split('')[0]
let len = v.split('').filter((item) => item ==='0').length + 1
paramsArr.push({fir: fir, len: len})
}
let resOver = []
paramsArr.map((itemP, Pindex) => {encodeMac.map((item) => {if (itemP.fir === item.type) {resOver.push(Pindex == 3 && item.value == '零' ? '' : item.value)
resOver.push(item.value == '零' ? '' : unit[itemP.len - 1].value)
}
})
})
let endUnit = ''
switch (arrK) {
case '0':
endUnit = '圆'
break
case '1':
endUnit = '万'
break
case '2':
endUnit = '亿'
break
case '3':
endUnit = '兆'
break
default:
break
}
resOver = resOver.join('') + endUnit
res.unshift(resOver)
}
return res
}
// 只兼容了角和分
encodeAmount(127.56)
encodeAmount(‘15717.87’)
正文完