import XEUtils from 'xe-utils' /** * 金额转成中文 * @param {*} money * @returns */ export function toNumMoneyToChinese (money: any) { const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'] // 汉字的数字 const cnIntRadice = ['', '拾', '佰', '仟'] // 基本单位 const cnIntUnits = ['', '万', '亿', '兆'] // 对应整数部分扩展单位 const cnDecUnits = ['角', '分', '毫', '厘'] // 对应小数部分单位 const cnInteger = '整' // 整数金额时后面跟的字符 const cnIntLast = '元' // 整型完以后的单位 const maxNum = 999999999999999 // 最大处理的数字 let IntegerNum // 金额整数部分 let DecimalNum // 金额小数部分 let ChineseStr = '' // 输出的中文金额字符串 let parts // 分离金额后用的数组,预定义 let Symbol = '' // 正负值标记 if (money === '') { return '' } money = parseFloat(money) if (money >= maxNum) { return '' } if (money === 0) { ChineseStr = cnNums[0] + cnIntLast + cnInteger return ChineseStr } if (money < 0) { money = -money Symbol = '负 ' } money = money.toString() // 转换为字符串 if (money.indexOf('.') === -1) { IntegerNum = money DecimalNum = '' } else { parts = money.split('.') IntegerNum = parts[0] DecimalNum = parts[1].substr(0, 4) } if (parseInt(IntegerNum, 10) > 0) { // 获取整型部分转换 let zeroCount = 0 const IntLen = IntegerNum.length for (let i = 0; i < IntLen; i++) { const n = IntegerNum.substr(i, 1) const p = IntLen - i - 1 const q = p / 4 const m = p % 4 if (n === '0') { zeroCount++ } else { if (zeroCount > 0) { ChineseStr += cnNums[0] } zeroCount = 0 // 归零 ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m] } if (m === 0 && zeroCount < 4) { ChineseStr += cnIntUnits[q] } } ChineseStr += cnIntLast // 整型部分处理完毕 } if (DecimalNum !== '') { // 小数部分 const decLen = DecimalNum.length for (let i = 0; i < decLen; i++) { const n = DecimalNum.substr(i, 1) if (n !== '0') { ChineseStr += cnNums[Number(n)] + cnDecUnits[i] } } } if (ChineseStr === '') { ChineseStr += cnNums[0] + cnIntLast + cnInteger } else if (DecimalNum === '') { ChineseStr += cnInteger } ChineseStr = Symbol + ChineseStr return ChineseStr } /** * 格式化为金额 * @param {*} value * @param {*} fixed */ export function toAmountString (value: any, fixed = 2) { return XEUtils.commafy(XEUtils.round(value, fixed), { digits: fixed }) } /** * 格式化为万元单位 * @param {*} value * @returns */ export function toWanAmountString (value: any, fixed = 2) { if (value < 0) { return XEUtils.commafy(XEUtils.ceil(value ? value / 10000 : 0, fixed), { digits: fixed }) } return XEUtils.commafy(XEUtils.floor(value ? value / 10000 : 0, fixed), { digits: fixed }) } /** * 四舍五入 */ export function round (num: any, fixed: any) { return XEUtils.round(num, fixed) } /** * 加法 */ export function add (num1: any, num2: any) { return XEUtils.add(num1, num2) } /** * 减法 */ export function subtract (num1: any, num2: any) { return XEUtils.subtract(num1, num2) } /** * 乘法 */ export function multiply (num1: any, num2: any) { return XEUtils.multiply(num1, num2) } /** * 除法 */ export function divide (num1: any, num2: any) { return XEUtils.divide(num1, num2) }