澳门网络娱乐游戏平台-澳门电子游戏娱乐网址-官方直营

JavaScript 实现的4种数字千位符格式化方法

JS达成的4种数字千位符格式化方法

所谓的数字千分位格局,即从个位数起,每四个人以内加三个逗号。举例“10,000”。针对这么些必要,笔者初阶写了如此二个函数:

// 方法一
function toThousands(num) {
    var result = [ ], counter = 0;
    num = (num || 0).toString().split('');
    for (var i = num.length - 1; i >= 0; i--) {
        counter++;
        result.unshift(num[i]);
        if (!(counter % 3) && i != 0) { result.unshift(','); }
    }
    return result.join('');
}

 

主意蓬蓬勃勃的实践进度正是把数字调换来字符串后,制伏为数组,再从最终开头,每种把数组中的元素插入到新数组(result)的起头。每插入贰个因素,counter就计一回数(加1),当counter为3的倍数时,就插入多个逗号,可是要留心最早(i为0时)无需逗号。最终通过调用新数组的join方法得出结果。

主意一相比较清晰易懂,也在项目中用了风姿洒脱段时间。可是直觉告诉自个儿,它的性子并不好。

办法二——方法后生可畏的字符串版

// 方法二
function toThousands(num) {
    var result = '', counter = 0;
    num = (num || 0).toString();
    for (var i = num.length - 1; i >= 0; i--) {
        counter++;
        result = num.charAt(i) + result;
        if (!(counter % 3) && i != 0) { result = ',' + result; }
    }
    return result;
}

 

艺术二是艺术风华正茂的改良版,不把字符串打垮为数组,始终对字符串操作。

主意三——循环相称末尾的多少个数字

 

 

// 方法三
function toThousands(num) {
    var num = (num || 0).toString(), re = /d{3}$/, result = '';
    while ( re.test(num) ) {
        result = RegExp.lastMatch + result;
        if (num !== RegExp.lastMatch) {
            result = ',' + result;
            num = RegExp.leftContext;
        } else {
            num = '';
            break;
        }
    }
    if (num) { result = num + result; }
    return result;
}

 

办法三是截然两样的算法,通过正则表明式循环匹配末尾的七个数字,每匹配贰回,就把逗号和包容到的剧情插入到结果字符串的起先,然后把相配指标(num)赋值为还未匹配的内容(RegExp.leftContext)。其它,还要小心:

1.只要数字的位数是3的倍数时,最终二次相配到的剧情自然是多个数字,不过最前头的三个数字前没有须求加逗号;
2.黄金时代旦数字的位数不是3的翻番,那num变量最终必定会将会剩下1到2个数字,循环过后,要把剩余的数字插入到结果字符串的先河。

虽说措施三减削了循环次数(二次巡回管理三个字符),但鉴于使用了正则表达式,一定水准上加码了消耗。

办法四——方法三的字符串版

// 方法四
function toThousands(num) {
    var num = (num || 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;
}

 

 

 

事实上,截取末尾八个字符的机能能够通过字符串类型的slice、substr或substring方法成功。这样就足以免止选拔正则表明式。

艺术五——分结归总法

// 方法五
function toThousands(num) {
    var num = (num || 0).toString(), temp = num.length % 3;
    switch (temp) {
        case 1:
            num = '00' + num;
            break;
        case 2:
            num = '0' + num;
            break;
    }
    return num.match(/d{3}/g).join(',').replace(/^0+/, '');
}

 

先把数字的位数补足为3的倍数,通过正则表明式,将其切割成每八个数字一个分组,再通过join方法加多逗号,末了还要把补的0移除。

方法六——懒人法

// 方法六
function toThousands(num) {
    return (num || 0).toString().replace(/(d)(?=(?:d{3})+$)/g, '$1,');
}

​一直感觉那几个格式化是能够通过一条正则表达式替换做出来的,可是急需用到断言等写法,万般无奈本身对那有的不太熟。Google了一下,还真找到了那般一条正则表达式,那预计是代码最短的兑现。

测量检验结果

数字

实行5000次消耗的岁月(ms)

方法一

方法二

方法三

方法四

方法五

方法六

1

4

1

3

1

14

2

10

14

1

3

0

7

2

100

12

1

2

4

5

3

1000

13

2

3

2

9

5

澳门搏彩官方网,10000

21

4

3

1

6

澳门游戏在线平台,3

100000

21

3

2

1

5

6

办法朝气蓬勃和办法二的确定性相比较注解,字符串操作的频率比数组操作的功用要高得多;方法六的测量试验结果告知大家,代码长短跟品质高低未有关系。方法四的汇总质量是最佳的(但为啥num为100的时候,品质有所减弱吗,那几个实在不解),主因是:

1.对譬如法风流洒脱、二,每一遍操作3个字符实际不是1个字符,裁减循环次数;
2.比照方法三、五、六,未有采纳正则表明式,减弱了消耗。

 <转>

本文由澳门网络娱乐游戏平台发布于Web前端,转载请注明出处:JavaScript 实现的4种数字千位符格式化方法

相关阅读