javascript實(shí)現(xiàn)將數(shù)字轉(zhuǎn)成千分位的方法小結(jié)【5種方式】
本文實(shí)例講述了javascript實(shí)現(xiàn)將數(shù)字轉(zhuǎn)成千分位的方法。分享給大家供大家參考,具體如下:
盡管離過(guò)年還有兩個(gè)月之久,春運(yùn)搶票的戰(zhàn)斗已經(jīng)打響了,悲劇的是我還沒(méi)搶到票,看到某瀏覽器上的數(shù)字時(shí),想到一個(gè)經(jīng)典面試題,沒(méi)錯(cuò),就是數(shù)字轉(zhuǎn)千分位。如將數(shù)字87463297轉(zhuǎn)成87,463,297,方法有很多種,我這里只想到5種。
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種方法類(lèi)似。
// 子項(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, i = len-1, arr = str.split(""); while(len-index>0){ len>=index&&len-index!==len && arr.splice(len-index,0,","); index+=3; i-=4; }; console.log(arr.join(""));
結(jié)語(yǔ):第1種方法是最簡(jiǎn)潔的,性能也是最好的,推薦使用。順便附上所有例子的demo源碼下載,如果還有其它更好更方便的方法請(qǐng)告訴我,謝謝!
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript中json操作技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動(dòng)畫(huà)特效與技巧匯總》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript遍歷算法與技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- 千分位數(shù)字格式化(用逗號(hào)隔開(kāi) 代碼已做了修改 支持0-9位逗號(hào)隔開(kāi))的JS代碼
- JS實(shí)現(xiàn)數(shù)字格式千分位相互轉(zhuǎn)換方法
- node.js中格式化數(shù)字增加千位符的幾種方法
- JS實(shí)現(xiàn)的4種數(shù)字千位符格式化方法分享
- javascript 數(shù)字格式化輸出的實(shí)現(xiàn)代碼
- JS格式化數(shù)字保留兩位小數(shù)點(diǎn)示例代碼
- js為數(shù)字添加逗號(hào)并格式化數(shù)字的代碼
- 5個(gè)javascript的數(shù)字格式化函數(shù)分享
- js對(duì)數(shù)字的格式化使用說(shuō)明
- JS數(shù)字千分位格式化實(shí)現(xiàn)方法總結(jié)
相關(guān)文章
javascript設(shè)置頁(yè)面背景色及背景圖片的方法
這篇文章主要介紹了javascript設(shè)置頁(yè)面背景色及背景圖片的方法,涉及JavaScript動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下2015-12-12微信小程序使用radio顯示單選項(xiàng)功能【附源碼下載】
這篇文章主要介紹了微信小程序使用radio顯示單選項(xiàng)功能,涉及針對(duì)radio組件事件響應(yīng)相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2017-12-12JS實(shí)現(xiàn)彈出下載對(duì)話框及常見(jiàn)文件類(lèi)型的下載
JS要實(shí)現(xiàn)下載功能,一般都是這么幾個(gè)過(guò)程:生成下載的URL,動(dòng)態(tài)創(chuàng)建一個(gè)A標(biāo)簽,并將其href指向生成的URL,然后觸發(fā)A標(biāo)簽的單擊事件,這樣就會(huì)彈出下載對(duì)話框,從而實(shí)現(xiàn)了一個(gè)下載的功能2017-07-07js實(shí)現(xiàn)無(wú)縫滾動(dòng)特效
這篇文章主要介紹了js實(shí)現(xiàn)無(wú)縫滾動(dòng)特效,結(jié)合已學(xué)知識(shí)進(jìn)行擴(kuò)展性練習(xí),感興趣的朋友可以參考一下2015-12-12VSCode中如何利用d.ts文件進(jìn)行js智能提示
這篇文章主要給大家介紹了關(guān)于VSCode中如何利用d.ts文件進(jìn)行js智能提示的相關(guān)資料,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2018-04-04