1. 程式人生 > >JS千分位格式化方法,以及多種方法性能比較

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

das 表達式 比較 wid asc 格式化 table 每次 測試結果

方法一字符串版

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

方法四性能最好.但我暫時並不會使用,因為:

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

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

2.在我華為的手機上有bug,並不會轉化加逗號,還是原模原樣展現.應該是機型太老舊問題,現在手機應該沒問題,以後兼容沒問題肯定首選.

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

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

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

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