js實(shí)現(xiàn)金額‘千位分隔符’的思路及代碼

找了一些js實(shí)現(xiàn)千位分隔符的代碼,發(fā)現(xiàn)有些有漏洞,一個(gè)是不能處理帶有小數(shù)點(diǎn)的數(shù),一個(gè)是不能處理大數(shù),綜合兩個(gè)代碼,整理了一下,大概思路:

數(shù)先轉(zhuǎn)為字符串并判斷數(shù)是否有小數(shù),如有,連小數(shù)點(diǎn)拿掉并暫存,
再除以3得余數(shù),再根據(jù)‘余數(shù)’和‘3’將字符串拆分push到數(shù)組,
最后轉(zhuǎn)字符串再加上之前暫存的小數(shù)

代碼如下:

// 千位分隔符(js 實(shí)現(xiàn))
function thousandBitSeparator(str){ 
    str = String(str);
    if (str.indexOf('.')>=0) {
        var postfix = str.substring(str.indexOf('.'));
        str = str.substring(0,str.indexOf('.'));
    }else{
        var postfix = '';
    };
    // console.log(postfix);
    // .99
    // console.log(str);
    // 9999999999999
    var iNum = str.length % 3; 
    var prev = ''; 
    var iNow = 0; 
    var temp = ''; 
    var arr = []; 
    if (iNum != 0){ 
        prev = str.substring(0, iNum); 
        arr.push(prev); 
    } 
    str = str.substring(iNum); 
    for (var i = 0; i < str.length; i++){ 
        iNow++; 
        temp += str[i]; 
        if (iNow == 3 && temp){ 
          arr.push(temp); 
          temp = ''; 
          iNow = 0; 
        } 
    } 
    // console.log(arr);
    // ["9", "999", "999", "999", "999"]
    return arr.join(',') + postfix; 
}
 
// console.log(thousandBitSeparator('9999999999999.99'));
// 9,999,999,999,999.99

測(cè)試有效

后來看到同事發(fā)布的優(yōu)化方案,覺得很棒

function splitK(num) {
  var decimal = String(num).split('.')[1] || '';//小數(shù)部分
  var tempArr = [];
  var revNumArr = String(num).split('.')[0].split("").reverse();//倒序
  for (i in revNumArr){
    tempArr.push(revNumArr[i]);
    if((i+1)%3 === 0 && i != revNumArr.length-1){
      tempArr.push(',');
    }
  }
  var zs = tempArr.reverse().join('');//整數(shù)部分
  return decimal?zs+'.'+decimal:zs;
}
var num = '123456789.123';
console.log(splitK(num));
//輸出:123,456,789.123

思路更簡(jiǎn)單:
先分離出小數(shù)部分;
對(duì)整數(shù)部分逆序?yàn)閿?shù)組;
每三個(gè)數(shù)字插入一個(gè)逗號(hào),如果是3的倍數(shù)位則最后一個(gè)不插入;
再逆序回來,拼接小數(shù)部分(如果有的話)。
參考 給一個(gè)數(shù)值加千位分隔號(hào)

測(cè)試如果是數(shù)字類型可能提示undefined,對(duì)num加個(gè)String()即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容