一、增加单位
addAmountUnit(123456789) => 1.23亿
/**
* @param integer {number}
* @returns {number}
*/
export function getDigit(integer) {
let digit = -1
while (integer >= 1) {
digit++
integer = integer / 10
}
return digit
}
/**
* @param integer {number}
* @param number {number}
* @param multiple {number}
* @param decimal {number}
* @returns {string|number}
*/
export function addWan(integer, number, multiple, decimal) {
const digit = getDigit(integer)
if (digit > 3) {
let remainder = digit % 8
if (remainder >= 5) {
remainder = 4
}
return (Math.round(number / Math.pow(10, remainder + multiple - decimal)) / Math.pow(10, decimal) + '万')
} else {
return (Math.round(number / Math.pow(10, multiple - decimal)) / Math.pow(10, decimal))
}
}
/**
* 金额格式化
* @param num {number} 金额
* @param decimal {number} 保留几位小数
* @returns {string|number|string|*}
* @description addAmountUnit(123456789) => 1.23亿
*/
export function addAmountUnit(num, decimal = 2) {
const integer = Math.floor(num)
const digit = getDigit(integer)
const unit = []
if (digit > 3) {
const multiple = Math.floor(digit / 8)
if (multiple >= 1) {
const tmp = Math.round(integer / Math.pow(10, 8 * multiple))
unit.push(addWan(tmp, num, 8 * multiple, decimal))
for (let i = 0; i < multiple; i++) {
unit.push('亿')
}
return unit.join('')
} else {
return addWan(integer, num, 0, decimal)
}
} else {
return num
}
}
二、增加前缀
addCurrency(10000) => ¥10,000.00
/**
* 金额
* @param num {number} 金额
* @param decimal {number} 小数
* @param cur {string} 前缀
* @returns {string}
* @description addCurrency(10000) => ¥10,000.00
*/
export function addCurrency(num, decimal = 2, cur = '¥') {
num = parseFloat(num)
if (!isFinite(num) || (!num && num !== 0)) return ''
const stringed = Math.abs(num).toFixed(decimal)
const _int = decimal ? stringed.slice(0, -1 - decimal) : stringed
const i = _int.length % 3
const head = i > 0 ? _int.slice(0, i) + (_int.length > 3 ? ',' : '') : ''
const _float = decimal ? stringed.slice(-1 - decimal) : ''
const sign = num < 0 ? '-' : ''
return (sign + cur + head + _int.slice(i).replace(/(\d{3})(?=\d)/g, '$1,') + _float)
}