1000000一串数字,我们以什么样的方式呈现,在考虑样式不会溢出的情况下

两个解决方案

三位数隔开

  1. // 三位数隔开
  2. function toThousandslsFilter (num) {
  3. return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
  4. }

将数字格式化为KMB

  1. // 将数字格式化为KMB
  2. function nFormatter (num, digits) {
  3. const si = [
  4. { value: 1, symbol: '' },
  5. { value: 1E3, symbol: 'K' },
  6. { value: 1E6, symbol: 'M' },
  7. { value: 1E9, symbol: 'G' },
  8. { value: 1E12, symbol: 'T' },
  9. { value: 1E15, symbol: 'P' },
  10. { value: 1E18, symbol: 'E' }
  11. ]
  12. const rx = /\.0+$|(\.[0-9]*[1-9])0+$/
  13. let i
  14. for (i = si.length - 1; i > 0; i--) {
  15. if (num >= si[i].value) {
  16. break
  17. }
  18. }
  19. return (num / si[i].value).toFixed(digits).replace(rx, '$1') + si[i].symbol
  20. }

综合一下

  1. /**
  2. * @description: 数字格式化
  3. * @param {number} num 数字
  4. * @param {number} ceil 小数
  5. * @param {boolean} unit 是否带单位
  6. * @return {number}
  7. */
  8. import numeral from 'numeral'
  9. export function formatNum (num, ceil = 2, unit = false) {
  10. // const formater = numeral(num);
  11. let ruler = '0,0'
  12. if (ceil >= 1) {
  13. ruler = ruler + '.'
  14. for (let i = 0; i < ceil; i++) {
  15. ruler = ruler + '0'
  16. }
  17. }
  18. if (unit) {
  19. ruler = ruler + ' a'
  20. }
  21. const result = numeral(num).format(ruler)
  22. return unit ? result.toUpperCase() : result
  23. }