数字计算保留小数,金额计算

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
  }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容