数字千分位处理

在一些电商或者后台经常使用到数字的千分处理,某面试要求正则和非正则都要实现一边

toLocaleString()

这是js原生的一个千分处理方法

let a = 123454.12a
a.toLocaleString()

使用正则匹配替换

先把保留小数点后两位
然后上正则
(/d)匹配一个数字
?=(xxx)正向肯定预查 在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
\d{3}匹配连续三个数字

let b = a.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');

7.12更新 手写实现,通过循环slice截取字符串实现

function toThousands(num) {
    numArr = (num || 0).toString().split(".")
    var num = numArr[0].toString(), result = '';
    // 三个一起减少循环测试
    while (num.length > 3) {
        result = ',' + num.slice(-3) + result;
        num = num.slice(0, num.length - 3);
    }
    if (num) { result = num + result; }
    return result + (numArr[1]?"."+numArr[1]:"");
}

console.log(toThousands(12314654))
console.log(toThousands(12314654.456))
console.log(toThousands())

你可能感兴趣的:(数字千分位处理)