js将数字转化为千分位,1234567转化为1,234,567

2022-05-19  本文已影响0人  keknei
  1. 用正则表达式转化为千分位
function numFormat(num){
 const res=num.toString().replace(/\d+/, function(n){ // 先提取小数点前后的整数部分
 //(\d)(?=(\d{3})正则的意思是匹配连续三个数结尾的数字,例如1234,1后面有234连续三个数的数字,就可以匹配上,匹配的是1这个数字。如果是123,因为1后面是两位数,所以就匹配不上了
   return n.replace(/(\d)(?=(\d{3})+$)/g,function($1){
     return $1+",";
    });
  })
  return res;
}

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

  1. 用js自带的方法toLocaleString()
let a=1234567894532;
let b=673439.4542;

console.log(a.toLocaleString());  // "1,234,567,894,532"
console.log(b.toLocaleString());  // "673,439.454"  (小数部分四舍五入了)

需要注意的是这个函数会把有小数的数字,会四舍五入的保留三位小数。另外这个函数说是有区域的局限性,可能在国内是逗号,到国外就是别的符号了,但是在国内用,一般也没事儿

  1. 将数字转换为字符数组,再循环整个数组, 每三位添加一个分隔逗号,最后再合并成字符串。因为分隔符在顺序上是从后往前添加的:比如 1234567添加后是1,234,567 而不是 123,456,7 ,所以方便起见可以先把数组倒序,添加完之后再倒序回来,就是正常的顺序了。要注意的是如果数字带小数的话,要把小数部分分开处理。
function numFormat(num){
    num=num.toString().split(".");  // 分隔小数点
    var arr=num[0].split("").reverse();  // 转换成字符数组并且倒序排列
    var res=[];
    for(var i=0,len=arr.length;i<len;i++){
      if(i%3===0&&i!==0){
         res.push(",");   // 添加分隔符
      }
      res.push(arr[i]);
    }
    res.reverse(); // 再次倒序成为正确的顺序
    if(num[1]){  // 如果有小数的话添加小数部分
      res=res.join("").concat("."+num[1]);
    }else{
      res=res.join("");
    }
    return res;
}

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

上一篇下一篇

猜你喜欢

热点阅读