JS格式化数字计算,可保留多位小数
/**
* 格式化金额数据
* 参数说明:
* @param number:要格式化的数字
* @param decimals:保留几位小数
* @param dec_point:小数点符号
* @param thousands_sep:千分位符号
* 例如:formatMoney(1234567.089, 2, ".", ","); // 1,234,567.09
*/
export function formatMoney(strData, n, dec_point, thousands_sep) {
/*
* 参数说明:
* number:要格式化的数字
* decimals:保留几位小数
* dec_point:小数点符号
* thousands_sep:千分位符号
* */
var CurrencyAndAmountRegExp = /^(\d{1,18})|(\d{1,18}\.)|(\d{1,17}\.\d{0,1})|(\d{1,16}\.\d{0,2})|(\.\d{1,2})$/
var _result = CurrencyAndAmountRegExp.test(strData)
if (_result === false) {
return strData
}
// 一般来说最多就6位吧,当然如果有特殊需求可自行更改(`・∀・´)
n = n > 0 && n <= 6 ? n : 2
var formatData = parseFloat((strData + '').replace(/[^\d\.-]/g, '')).toFixed(n) + ''
var l = formatData.split(dec_point)[0].split('').reverse()
var r = formatData.split(dec_point)[1]
var t = ''
for (var i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 === 0 && (i + 1) !== l.length ? thousands_sep : '')
}
return t.split('').reverse().join('') + dec_point + r
}
/**
* 格式化货币
* @param {number/String} money 钱数
* @returns
*/
export function formatMoneyString(money) {
let moneyNumer = isNaN(money) ? 0 : Number(money)
if (moneyNumer >= 0) {
return formatMoney(money, 2, '.', ',')
} else {
let temp = money + ''
temp = temp.substr(1, temp.length)
let formatMoneyNumer = formatMoney(Number(temp), 2, '.', ',')
return '-' + formatMoneyNumer
}
}