15JS实现数字千分位格式化

Posted 天界程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15JS实现数字千分位格式化相关的知识,希望对你有一定的参考价值。

数字千分位格式化

  • 将数字千分位格式化,输出字符串
  • 如输入数字12050100,输出字符串12,050,100
  • (注意:逆序判断)

常见思路

  • 转换为数组,reverse,每3位拆分
  • 使用正则表达式
  • 使用字符串拆分

代码实现

  • 数组方式
export function numFormat1 (n:number):string 
  n = Math.floor(n) // 只考虑整数
  const s = n.toString()
  const arr = s.split('').reverse()

  return arr.reduce((prev,val,idx) =>
    if (idx % 3 === 0) 
      if (prev) 
        return val + ',' + prev
       else 
        return val
      
     else 
      return val + prev
    
  ,'')

  • 字符串方式
export function numFormat2 (n:number):string 
  n = Math.floor(n) // 只考虑整数
  const s = n.toString()
  const len = s.length
  let res = ''
  
  for (let i = len -1; i >= 0; i--) 
    const j = len - i

    if (j % 3 === 0) 
      if (i === 0) 
        res = s[i] + res
       else 
        res = ',' + s[i] + res
      
     else 
      res = s[i] + res
    
  

  return res

功能测试

const n = 12050100
console.log(numFormat1(n)) 
console.log(numFormat2(n))

打印结果

12,050,100
12,050,100

性能测试

console.time('numFormat1')
for (let i = 0; i < 100 * 10000; i++) 
  numFormat1(i)

console.timeEnd('numFormat1')

console.time('numFormat2')
for (let i = 0; i < 100 * 10000; i++) 
  numFormat2(i)

console.timeEnd('numFormat2')

打印结果

numFormat1: 249.857ms
numFormat2: 105.373ms

性能分析

  • 使用数组,转换影响性能
  • 使用正则表达式,性能较差
  • 使用字符串,性能较好——推荐答案

总结

  • 顺序:从尾到头
  • 尽量不要转换数据结构
  • 慎用正则表达式

以上是关于15JS实现数字千分位格式化的主要内容,如果未能解决你的问题,请参考以下文章

数字千分位处理,number.js

js格式化数字

js千分位实现方法

金额 千分位的分割方法

JS实现千分位

js 数字转千分位 简单点的