JS千分位格式化方法,以及多種方法性能比較

方法一字符串版

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) {
    return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
}

方法三——每次截取三位末尾字符串

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;
}

  

方法四——toLocaleString

('2525235235235325').toLocaleString()

 

測試結果

數字 執行50000次消耗的時間(ms)
方法一 方法二 方法三 方法四
1 28 231 24 27
10 37 199 25 28
100 46 214 24 27
1000 57 304 49 26
10000 65 293 49 27
100000 75 307 55 28

方法四性能最好.但我暫時並不會使用,由於:javascript

注意:使用方法四有2個問題:java

1:要先把數字轉化成字符串才能達到表格所示的消耗時間.直接操做數據效率會打折.正則表達式

2.在我華爲的手機上有bug,並不會轉化加逗號,仍是原模原樣展示.應該是機型太老舊問題,如今手機應該沒問題,之後兼容沒問題確定首選.性能

方法二的測試結果告訴咱們,代碼長短跟性能高低沒有關係。方法三的綜合性能是最好的:測試

  • 對比方法一,每次操做3個字符而不是1個字符,減小循環次數;
  • 對比方法二,使用正則表達式,最浪費性能。

最後,我選擇了方法三做爲最終的優化方案。優化

相關文章
相關標籤/搜索