在一些电商或者后台经常使用到数字的千分处理,某面试要求正则和非正则都要实现一边
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())