5种方式将数字转成千分位
曾經(jīng)是一個(gè)經(jīng)典面試題哦,大家看看自己會(huì)不會(huì)
1、利用正則的零寬度正預(yù)測(cè)先行斷言(?=exp),名字有點(diǎn)難記,意思是它斷言自身出現(xiàn)的位置的后面能匹配表達(dá)式exp,對(duì)此概念還不明白的可以戳這里,這里不做過(guò)多解釋。數(shù)字千分位的特點(diǎn)是,第一個(gè)逗號(hào)后面數(shù)字的個(gè)數(shù)是3的倍數(shù),正則:/(d{3})+$/;第一個(gè)逗號(hào)前最多可以有1至3個(gè)數(shù)字,正則:/d{1,3}/。加起來(lái)就是/d{1,3}(d{3})+$/,分隔符要從前往后加,就要將前面的數(shù)字“87”替換成“87,”,為什么是87不是874?因?yàn)?74后面只剩下5位數(shù)字,在632后加一個(gè)分隔符后,將只剩下97,不符合千分位要求,所以第一個(gè)分隔符后面的數(shù)字位數(shù)必須是3的倍數(shù)。要匹配數(shù)字87,又要保證87后面數(shù)字位數(shù)是3的倍數(shù),并且要將匹配的87替換成“87,”,就要用到(?=exp),這里先定義一個(gè)變量var str = "87463297";
// 零寬斷言
console.info( str.replace(/d{1,3}(?=(d{3})+$)/g,function(s){
return s+','
}) )
2、利用正則的子項(xiàng)來(lái)替換,跟第1種方法類似。
// 子項(xiàng)
console.info( str.replace(/(d{1,3})(?=(d{3})+$)/g,function($1){
return $1=$1+','
}) )
3、先將字符串轉(zhuǎn)成數(shù)組,利用reverse反轉(zhuǎn)數(shù)組后每3個(gè)數(shù)字后添加一個(gè)分隔符“,”,到字符串末尾除外,之后轉(zhuǎn)回字符串。
// 利用字符串和數(shù)組方法
console.info( str.split("").reverse().join("").replace(/(d{3})+?/g,function(s){
return s+",";
}).replace(/,$/,"").split("").reverse().join("") )
4、利用while循環(huán)拼接字符串每隔3個(gè)數(shù)字加一個(gè)分隔符,首尾不加
// 利用循環(huán)拼接字符串每隔3個(gè)加一個(gè)分隔符
var result="",
index = 0,
len = str.length-1;
while(len>=0) {
index%3===0&&index!==0 ? result+=","+str[len] : result+=str[len];
len--;
index++;
};
result=result.split("").reverse().join("");
console.info(result);
5、利用while循環(huán)在數(shù)組里push分隔符,首尾不加
// 利用while循環(huán)在數(shù)組里push分隔符
var result="",
index = 0,
len = str.length,
arr = str.split("");
while(len-index>0){
len>=index&&len-index!==len && arr.splice(len-index,0,",");
index+=3;
};
console.log(arr.join(""));
注:第1種方法是最簡(jiǎn)潔的,性能也是最好的,推薦使用。
總結(jié)
以上是生活随笔為你收集整理的5种方式将数字转成千分位的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PROFINET如何实现实时性
- 下一篇: 《怪谈研究所》地狱神探通关攻略