JavaScript 数字千分符

🌙
手机阅读
本文目录结构

需求

对数字或者字符串进行千分符处理,写出核心代码就可以,能兼容处理更好;

第一种字符串方法

// 封装为方法,方便维护,尽量不要改写默认对象的原型
function thousand(arg) {
    // 转换成字符
    arg = arg.toString();
    let count = 0;
    let strNew = '';
    // 从后向前加千分符,
    // 987,654,321 然后转为 123,456,789
    for (let i = (arg.length - 1); i >= 0; i--) {
        if (count % 3 === 0 && count != 0) {
            strNew += ',';
        }
        strNew += arg.substr(i, 1);
        count++;
    }
    console.log('strNew', strNew);//987,654,321
    strNew = strNew.split('').reverse().join('');
    return strNew;
}
let str1 = '123456789';
let str2 = '12345678';
let str3 = '1234567';

console.log(thousand(str1));//123,456,789
console.log(thousand(str2));//12,345,678
console.log(thousand(str3));//1,234,567

第二种:正则方法

// 封装为方法,方便维护,尽量不要改写默认对象的原型
function thousand(arg) {
    // 转换成字符
    arg = arg.toString();
    // ((?:\d{3})+) => 匹配连续三个参数(从后面匹配的方式)
    // 前面可能存在0个,也可能存在,1个,2个,3个,但是如果是3个,就会被后面的正则匹配,所以匹配两个就好
    // 同时首位不能为0
    // ([1-9]\d{0,2})
    var reg = /^([1-9]\d{0,2})((?:\d{3})+)$/;
    var s = arg.replace(reg, function (...arg) {
        console.log('arg', arg);
        // arg[2].match(/\d{3}/g) 返回一个数组,数字加字符串,会默认用,隔开
        // (arg[2].match(/\d{3}/g)).join('-')
        return arg[1] + ',' + arg[2].match(/\d{3}/g);
    })
    return s;
}


let str1 = '123456789';
let str2 = '12345678';
let str3 = '1234567';

console.log(thousand(str1));//123,456,789
console.log(thousand(str2));//12,345,678
console.log(thousand(str3));//1,234,567

第二种:toLocaleString方法

// 封装为方法,方便维护,尽量不要改写默认对象的原型
function thousand(arg) {
    // toLocaleString 方法返回这个数字在特定语言环境下的表示字符串。
    // https://www.axihe.com/api/js-es/ob-number/to-locale-string.html
    // 此参数大小写不敏感,
    return (parseInt(arg)).toLocaleString("en")
}


let str1 = '123456789';
let str2 = '12345678';
let str3 = '1234567';

console.log(thousand(str1));//123,456,789
console.log(thousand(str2));//12,345,678
console.log(thousand(str3));//1,234,567

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

目前重心已经放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>