2019-09-20 | 前端 | UNLOCK

数字格式化处理

数字格式化

Numeral.js

文档

用于格式化和操作数字的 JavaScript 库。数字可以被格式化为货币,百分比,时间,几个小数位数,千分位等等。

但是现在已经不维护了,处理数据有限制,只能处理 0.000001 - 999999999999999 范围内的数字,可以作一些简单的二次封装处理

function numFormat(num) {
  return num.toString().indexOf('.') !== -1
    ? num.toLocaleString()
    : num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
}

function addMinis(num, bollean = false) {
  return bollean ? `-${num}` : num
}

export function numberFormat(num) {
  if (isNaN(num)) {
    return 'NaN'
  }

  const isLessZero = Number(num) < 0 // 是否为负数
  const absNum = Math.abs(num) // 取绝对值
  if (absNum === 0) {
    return 0
  }
  const regexp = /(?:\.0*|(\.\d+?)0+)$/ // 去除小数点后多余的0
  if (absNum > 999999999999999) {
    // 数据过大的问题
    return addMinis(numFormat(absNum), isLessZero)
  }

  // numeral(0.000001).format('0')  => NAN
  return absNum > 0.000001
    ? addMinis(numeral(absNum).format('0, 0.[000000000000000000]'), isLessZero)
    : addMinis(absNum.replace(regexp, '$1'), isLessZero)
  // 0,0.[000000000000000000] 默认千分位',' 分割,保留18位小数,并且去除无效的0
}

accounting.js

一个轻量级的 JavaScript 库,用于格式化数字,金额和货币等。

文档

暂未使用,功能好像没有 Numeral.js 丰富