/**
* 数字转金额
* @param {number} value
* @return {string|*}
*/
function convertNumberToMoney (value) {
if (isNaN(value)) return ''
return value.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '&,')
}
/**
* 数字转大写金额
* @param {number} value
* @return {string}
*/
function convertMoneyToChinese(value) {
const digitArr = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
const digitUnitArr = ['', '万', '亿']
const digitSuffixArr = ['', '拾', '佰', '仟']
// 整数部分
const integerValueArr = String(Math.trunc(Math.abs(value)).split('')
if (integerValueArr.length>12) {
throw new Error('超出最大可转换金额')
return '超出最大可转换金额'
}
// 分割
const unitValueArr = []
integerValueArr.reverse().forEach((item, i, arr) => {
if (unitValueArr.length === 0) {
unitValueArr.push([item])
return
}
const lastUnitItem = unitValueArr[unitValueArr.length - 1]
if (lastUnitItem.length<4) {
lastUnitItem.push(item)
} else {
unitValueArr.push([item])
}
})
// 转换
const clearZero = (val) => val.reverse().join('').replace(/零{2,}/g, '零').replace(/(.+)(零)/g, '1')
const integerResult = clearZero(unitValueArr.map((_, i) => {
const unitValue = clearZero(_.map((_item, _index) => {
if (+_item === 0) {
return digitArr[_item]
}
return digitArr[_item] + digitSuffixArr[_index]
}))
return unitValue + (unitValue !== '零' ? digitUnitArr[i] : '')
}))
// 小数部分
let decimalResult = ''
if(value - Math.trunc(value)>0) {
const decimalArr = value.toFixed(2).substring(value.toFixed(2).indexOf('.') + 1).split('')
decimalResult = `元零{digitArr[decimalArr[0]]}角`
if(decimalArr.length > 1){
decimalResult += `${digitArr[decimalArr[1]]}分`
}
}
// 负数
const isMinus = value < 0
return (isMinus ? '负' : '') + integerResult + (decimalResult || '元整')
}