JS數(shù)字千分位格式化實(shí)現(xiàn)方法總結(jié)
本文實(shí)例講述了JS數(shù)字千分位格式化實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
用js實(shí)現(xiàn)如下功能,將給定的數(shù)字轉(zhuǎn)化成千分位的格式,如把“10000”轉(zhuǎn)化成“10,000”,并考慮到性能方面的因素。
一.首先想到的辦法,將數(shù)字轉(zhuǎn)換為字符串(toString())再打散成數(shù)組(split),如果直接數(shù)字轉(zhuǎn)換為數(shù)組,就是一整個(gè)放進(jìn)去了,不能單獨(dú)取到每一位。然后通過循環(huán),逐個(gè)倒著把數(shù)組中的元素插入到新數(shù)組的開頭(unshift),第三次或三的倍數(shù)次,插入逗號(hào),最后把新數(shù)組拼接成一個(gè)字符串
n=1233456; toQfw(n); function toQfw(){ var arr_n=n.toString().split(""); var result=[]; var cs=0; for(var i=arr_n.length-1;i>=0;i--){ cs++; result.unshift(arr_n[i]); if(!(cs%3)&&i!=0){ //i!=0即取到第1位的時(shí)候,前面不用加逗號(hào) result.unshift(","); } alert(result.join("")) } };
缺點(diǎn),一位一位的加進(jìn)去,性能差,且還要先轉(zhuǎn)換成字符串再轉(zhuǎn)換成數(shù)組
二.于是想到能不能從頭到尾都用字符串完成,不通過數(shù)組,即用charAt()獲取子字符串,主要用到字符串拼接
n=1233456; toQfw(n); function toQfw(){ var str_n=n.toString(); var result=""; var cs=0; for(var i=str_n.length-1;i>=0;i--){ cs++; result=str_n.charAt(i)+result; if(!(cs%3)&&i!=0){ result=","+result; } alert(result) } };
缺點(diǎn):依然是一位一位加進(jìn)去
三.可不可以不用循環(huán)用純字符串方法來實(shí)現(xiàn),這樣就不會(huì)一位一位加進(jìn)去了。每次取末三位子字符串放到一個(gè)新的空字符串里并拼接上之前的末三位,原本數(shù)組不斷截掉后三位直到長(zhǎng)度小于三個(gè),最后把剝完的原數(shù)組拼接上新的不斷被填充的數(shù)組
n=1233456; toQfw(n); function toQfw(){ var str_n=n.toString(); var result=""; while(str_n.length>3){ result=","+str_n.slice(-3)+result; str_n=str_n.slice(0,str_n.length-3) } if(str_n){ alert(str_n+result) } };
性能最佳
四.用正則表達(dá)式,去最后三位數(shù)字,和字符串匹配,匹配成功就把后三位存起來,前面加逗號(hào),然后將原字符串的值更新為匹配成功剩下的左邊,直到正則與字符串匹配成功后三位的值和原字符串更新值相等時(shí),說明取完了
n=1233456; toQfw(n); function toQfw(){ var str_n=n.toString(); var result=""; var re=/\d{3}$/; while(re.test(str_n)){ result=RegExp.lastMatch+result; if(str_n!=RegExp.lastMatch){ result=","+result; str_n=RegExp.leftContext; //匹配成功,返回匹配內(nèi)容左側(cè)的字符信息 } else{ num=""; } } if(str_n){ alert(str_n+result); } }
五.簡(jiǎn)化版正則,用前向聲明和非前向聲明,從后往前匹配3位數(shù)字,前向聲明的地方替換成逗號(hào),但是如果剛好3的倍數(shù)位,會(huì)第一位前面也加,所以前面要再來個(gè)非前向聲明
var str="123598752"; var re=/(?=(?!(\b))(\d{3})+$)/g; str=str.replace(re,","); alert(str);
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
TypeScript 引用資源文件后提示找不到的異常處理技巧
這篇文章主要介紹了TypeScript 引用資源文件后提示找不到的異常處理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07bootstrap treeview 擴(kuò)展addNode方法動(dòng)態(tài)添加子節(jié)點(diǎn)的方法
bootstrap-treeview 是一款基于Jquery+bootstrap的樹控件,這篇文章主要介紹了bootstrap treeview 擴(kuò)展addNode方法動(dòng)態(tài)添加子節(jié)點(diǎn)的方法,需要的朋友可以參考下2017-11-11js中判斷用戶輸入的值是否為空的簡(jiǎn)單實(shí)例
本篇文章主要是對(duì)js中判斷用戶輸入的值是否為空的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12js中apply和Math.max()函數(shù)的問題及區(qū)別介紹
這篇文章主要介紹了js中apply和Math.max()函數(shù)的問題,本文給大家?guī)韮煞N答案,每一種答案給大家介紹的非常詳細(xì),在文章底部給大家提到了js中Math.max.apply和Math.max的區(qū)別,感興趣的朋友一起看看吧2018-03-03JavaScript實(shí)現(xiàn)首頁圖片輪播圖效果
這篇文章主要介紹了JavaScript實(shí)現(xiàn)首頁圖片輪播圖效果,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06微信小程序上傳帖子的實(shí)例代碼(含有文字圖片的微信驗(yàn)證)
這篇文章主要介紹了小程序上傳帖子(含有文字圖片的微信驗(yàn)證)的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07