国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS數(shù)字千分位格式化實現(xiàn)方法總結(jié)

2019-11-19 18:26:25
字體:
供稿:網(wǎng)友

本文實例講述了JS數(shù)字千分位格式化實現(xiàn)方法。分享給大家供大家參考,具體如下:

用js實現(xiàn)如下功能,將給定的數(shù)字轉(zhuǎn)化成千分位的格式,如把“10000”轉(zhuǎn)化成“10,000”,并考慮到性能方面的因素。

一.首先想到的辦法,將數(shù)字轉(zhuǎn)換為字符串(toString())再打散成數(shù)組(split),如果直接數(shù)字轉(zhuǎn)換為數(shù)組,就是一整個放進去了,不能單獨取到每一位。然后通過循環(huán),逐個倒著把數(shù)組中的元素插入到新數(shù)組的開頭(unshift),第三次或三的倍數(shù)次,插入逗號,最后把新數(shù)組拼接成一個字符串

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位的時候,前面不用加逗號        result.unshift(",");    }    alert(result.join(""))  }};

缺點,一位一位的加進去,性能差,且還要先轉(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)  }};

缺點:依然是一位一位加進去

三.可不可以不用循環(huán)用純字符串方法來實現(xiàn),這樣就不會一位一位加進去了。每次取末三位子字符串放到一個新的空字符串里并拼接上之前的末三位,原本數(shù)組不斷截掉后三位直到長度小于三個,最后把剝完的原數(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)  }};

性能最佳

四.用正則表達式,去最后三位數(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);  }}

五.簡化版正則,用前向聲明和非前向聲明,從后往前匹配3位數(shù)字,前向聲明的地方替換成逗號,但是如果剛好3的倍數(shù)位,會第一位前面也加,所以前面要再來個非前向聲明

var str="123598752";var re=/(?=(?!(/b))(/d{3})+$)/g;str=str.replace(re,",");alert(str);

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)學運算用法總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 孟津县| 阿坝县| 台南县| 错那县| 边坝县| 西吉县| 莒南县| 汕头市| 那坡县| 慈利县| 祥云县| 靖西县| 武邑县| 宜君县| 湖口县| 高碑店市| 德昌县| 利辛县| 兰州市| 三明市| 富顺县| 肇东市| 黄山市| 潜山县| 丰城市| 建瓯市| 竹溪县| 黔江区| 连江县| 连南| 南和县| 如东县| 衢州市| 高邮市| 贡嘎县| 公主岭市| 长顺县| 忻州市| 德安县| 泰和县| 仁化县|