字节青训营笔试之数字金额格式化

936 阅读1分钟

题目描述

数字金额格式化是一道考频非常高的题目,无论是实习还是校招都有可能考到这个题目,所以笔者希望大家都能搞懂这道题目,下面让我们来一起探索这道题目吧。

image.png

解题思路一(使用unshift)

  1. 首先将传入函数的数字通过toString方法转换为字符串,然后使用split进行分割。
  2. 定义一个计数器,用于辅助判断什么时候添加逗号。
  3. 倒序遍历添加数字和逗号。
function toThousands(num) {
  // 首先将传入的数字进行分割
  num = num.toString().split('.');
  // 定义最终要返回的结果
  const res = [];
  let count = 0;
  // 遍历每一个字符
  for (let i = num[0].length - 1; i >= 0; i--) {
    res.unshift(num[0][i]);
    count++
    if (count % 3 === 0 && i !== 0) {
      res.unshift(',')
    }
  }
  return num[1] ? res.join('') + '.' + num[1] : res.join('');
}


let b = 235673439.454;
console.log("二者是否相等:",b.toLocaleString() === toThousands(b));
console.log(b.toLocaleString()); 
console.log(toThousands(b)); 


// let test = 236471283572983412;
// console.log("二者是否相等:",test.toLocaleString() === toThousands(test));
// console.log(test.toLocaleString()); 
// console.log(toThousands(test)); 

解题思路二(使用正则)

function numFormat(num){
  var res=num.toString().replace(/\d+/, function(n){ // 先提取整数部分
       return n.replace(/(\d)(?=(\d{3})+$)/g,function($1){
          return $1+",";
        });
  })
  return res;
}

var a=1234567894532;
var b=673439.4542;
console.log(numFormat(a)); // "1,234,567,894,532"
console.log(numFormat(b)); // "673,439.4542"

题目反思

这个题目必须要倒着遍历,然后通过计数器辅助来进行添加逗号,是一个很不错的思路,指的我们反复学习揣摩。