原生js之千位分隔符(包括小數狀況)

同窗前端面試遇到這麼一個題目 :給數字添加千分位分隔符

一拿到他給的面試題,感受挺容易的,不過等本身寫後發現很是考慮邏輯,以及思惟能力(我是小白)
上網百度了一波全是用正則表達式來解決的,正則這塊我只懂皮毛,因此感受有點看不明白,不過這個博客解釋挺清楚的使用正則表達式實現千位分割符前端


我這我的就是有一個毛病,感興趣的東西我就想以本身的思惟寫出來,因此如下是一個前端小白的解決思路:
將函數thousand的參數a當作3部分組合head,body,xiaoshu.列如:1314.520可當作1 314 .520這三部分組合而成。廢話少說,代碼以下:面試

<script>
function thousand(a){
    var arr = new Array(); 
    var xiaoshu = "";  //用來記錄參數小數數值包括小數點
    var zhengshu ="";  //用來記錄參數錄整數數值
    if(a<1000){    //當參數小於1000的時候直接返回參數
        return a;
    }else{
        t = a.toString();   //將整數轉換成字符串
        if(t.indexOf('.')>0){   //若是參數存在小數,則記錄小數部分與整數部分
            var index = t.indexOf('.');
            xiaoshu = t.slice(index,t.length);
            zhengshu = t.slice(0,index);
        }else{   //不然整數部分的值就等於參數的字符類型
            zhengshu = t;
        }
        var num = parseInt(zhengshu.length/3);   //判斷須要插入千位分割符的個數

        //將整數1234567890部分拆分爲2部分,變量head:1   變量body:123456789
        var head = zhengshu.slice(0,zhengshu.length-num*3);  
        if(head.length>0){  //若是head存在,則在head後面加個千位分隔符,
            head += ',';
        }
        var body = zhengshu.slice(zhengshu.length-num*3,zhengshu.length);

        //將body字符串123456789轉換成一個字符數組arr2 = ['123','456','789']
        var arr2 = new Array();   
        for(var i=0;i<num;i++){
            arr2.push(body.slice(i*3,i*3+3));
        }
        body = arr2.join(',');   //將數組arr2經過join(',')   方法,拼接成一個以逗號爲間隔的字符串

        zhengshu = head + body;  //拼接整數部分
        var result = zhengshu + xiaoshu;   //最後拼接整數和小數部分
        return result;   //返回結果
    }
}
console.log(thousand(665565656511325161.233333));
</script>

小白敬上!正則表達式

相關文章
相關標籤/搜索