//注意:數(shù)字與字符的轉(zhuǎn)換會(huì)丟失多余的尾部0('123.010'<->123.01,'123.00'<->123) var NumberFormat = { //按照每3位逗號(hào)分隔,字符串截子串法 toCommaFormat: function(number){ //如果是數(shù)字,則轉(zhuǎn)換為字符串 if(typeof number == 'number'){ number = String(number) } var pointIndex = number.lastIndexOf('.'); //獲取小數(shù)點(diǎn)的位置 var hasDecimal = pointIndex != -1; //檢查是否包含小數(shù)點(diǎn) var numberInteger = hasDecimal ? number.substring(0, pointIndex) : number; //獲取數(shù)的整數(shù)部分 var length = numberInteger.length; if(length > 3){ var numberFormat = ''; //從尾部往前截子串拼接 for(var i= numberInteger.length; i> 0; i=i-3){ //當(dāng)前子串+之前拼接好的子串(因:substring(0,1) == substring(-2,1),故無(wú)需判斷i-3為負(fù)數(shù)的情況) numberFormat = numberInteger.substring(i-3,i) + (numberFormat==''?'':(','+numberFormat)); } //整數(shù)部分+小數(shù)部分 var numberDecimal = hasDecimal ? number.substring(pointIndex) : ''; return numberFormat + numberDecimal; }else{ //無(wú)需分隔,直接返回 return number; } }, //按照每3位逗號(hào)分隔,余數(shù)拼接法(缺點(diǎn):有位數(shù)限制) toCommaFormat2: function(number){ //如果是數(shù)字,則轉(zhuǎn)換為字符串 if(typeof number == 'number'){ number = String(number) } var pointIndex = number.lastIndexOf('.'); //獲取小數(shù)點(diǎn)的位置 var hasDecimal = pointIndex != -1; //檢查是否包含小數(shù)點(diǎn) var numberInteger = hasDecimal ? number.substring(0, pointIndex) : number; //獲取數(shù)的整數(shù)部分 var length = numberInteger.length; if(length > 3){ var numberFormat = ''; var remainder; //余數(shù) var quotient; //商 while(true){ quotient = Math.floor(Number(numberInteger)/1000); //商標(biāo)識(shí)還需不需要進(jìn)一步分隔 remainder = Number(numberInteger)%1000; //余數(shù)即是分隔下來(lái)的子串 numberFormat = String(remainder) + (numberFormat == ''?'':(','+numberFormat)); //當(dāng)前余數(shù)拼接之前的余數(shù) if(quotient == 0){ //商為0,計(jì)算完畢 break; } //商作為被除數(shù),進(jìn)一步分隔 numberInteger = quotient; } //整數(shù)部分+小數(shù)部分 var numberDecimal = hasDecimal ? number.substring(pointIndex) : ''; return numberFormat + numberDecimal; }else{ //無(wú)需分隔,直接返回 return number; } }, //正則式替換,來(lái)自網(wǎng)友 format_number:function(nStr ){ nStr += ''; //數(shù)字轉(zhuǎn)換為字符 x = nStr.split('.'); //按照小數(shù)點(diǎn)分隔 x1 = x[0]; //整數(shù)部分 x2 = x.length > 1 ? '.' + x[1] : ''; //小數(shù)部分 var rgx = /(\d+)(\d{3})/; //正則式定義 while (rgx.test(x1)) { //正則式匹配 x1 = x1.replace(rgx, '$1' + ',' + '$2'); //正則式替換 } return x1 + x2; } };
總結(jié):
1.推薦使用字符串截子串的方式進(jìn)行格式化,這樣沒(méi)有長(zhǎng)度限制。
2.調(diào)用函數(shù)傳參最好使用字符串類(lèi)型,這樣才不會(huì)丟失尾部的0。
3.網(wǎng)友的正則式法非常簡(jiǎn)潔漂亮,還有字符串分隔成單字符反序拼接法等。
聯(lián)系客服