用 JS 实现数字千分位格式化

需求:用 JS 实现数字千分位格式化,每个三位添加一个逗号

方法一:利用字符串str.slice(-3)是取最后三位数字,并在前面添加‘,’号,再通过strNum.slice(0,str.length-3)(是取从字符串开始到后三位截止)来改变原字符串的位数,然后循环即可。

function formatStr(num){
    let strNum = num.toString();
    let res = '';
    while (strNum.length > 3) {
        //选取后三位,在前面添加','并拼接
        res = ',' + strNum.slice(-3) + res;
        //除后三位以外全部选取,对原字符串重新赋值来改变长度
        strNum = strNum.slice(0,strNum.length-3);
    };
    res = strNum + res;
    return res;
}
let str = '111213213322';      
console.log(formatStr(str));//1,111,213,213,322

方法二:循环字符串,从后开始循环j%3===0判断是否是3的倍数,是的话就在后面添加‘,’号,在进行拼接。

判断逻辑解析:

  • len - i表示从当前位置到字符串末尾的剩余位数
  • (len - i) % 3 === 0表示剩余位数是3的倍数
  • i > 0确保不在第一个数字前加逗号
function formatStr(num) {
    let str = '';
    let strNum = num.toString();
    let len = strNum.length;
    
    for (let i = 0; i < len; i++) {
        // 判断条件:i > 0 (不是第一个数字) 且 剩余位数是3的倍数
        if (i > 0 && (len - i) % 3 === 0) {
            str += ',';
        }
        str += strNum[i];
    }
    return str;
}
let str = '1111213213322';
console.log(formatStr(str));//1,111,213,213,322

 执行过程:

i=0: len-i=13, 13%3=1 → 不加逗号,str='1'
i=1: len-i=12, 12%3=0 → 加逗号,str='1,1'
i=2: len-i=11, 11%3=2 → 不加逗号,str='1,11'
i=3: len-i=10, 10%3=1 → 不加逗号,str='1,111'
i=4: len-i=9,  9%3=0  → 加逗号,str='1,111,2'
...
结果:1,111,213,213,322

方法三:使用正则表达式

const str = '6465432124545635151325';
const res = str.replace(/\B(?=(\d{3})+(?!\d))/g,',');
console.log('res======',res); //res====== 6,465,432,124,545,635,151,325

 

posted @ 2022-10-07 17:06  雪旭  阅读(880)  评论(0)    收藏  举报