JavaScript 千位分隔符

806 阅读1分钟

把普通数字 转换为小数点后保持不变,小数点前面的数字,每三个数字间加 “,”分割

方法一

  function numFormat(num) {
    let newNum = []
    let numberArray = number.toString().split(".")
    let reverseNumber = numberArray[0].split("").reverse()
    for (let i = 0; i < reverseNumber.length; i++) {
      if (i % 3 === 0 && i !== 0) {
        newNum.push(",")
      }
      newNum.push(reverseNumber[i])
    }
    newNum.reverse()
    if (numberArray[1]) {
      newNum = newNum.join("") + "." + numberArray[1]
    } else {
      newNum = newNum.join("")
    }
    return newNum
  }
  console.log(numFormat(number))

方法二

toLocaleString() 方法可把一个 Number 对象转换为本地格式的字符串

语法

NumberObject.toLocaleString()
const a=1234567894532;
const b=673439.4542;

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

返回值

数字的字符串表示,由实现决定,根据本地规范进行格式化,可能影响到小数点或千分位分隔符采用的标点符号。

抛出

当调用该方法的对象不是 Number 时抛出 TypeError 异常

方法三

使用正则表达式

语法

str.replace(regexp|substr, newSubStr|function)
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"