摘要:實(shí)現(xiàn)思路使用正則,用數(shù)字中的小數(shù)點(diǎn)做匹配尾部參考,來匹配某個(gè)數(shù)字后面的一個(gè)或多個(gè)連續(xù)位數(shù)字,如果匹配到把該數(shù)字替換成自身加分隔符,如下示例分隔數(shù)字解釋和之間有一個(gè)連續(xù)位數(shù)字,那么給后面添加一個(gè)分隔符得到結(jié)果。
功能:可實(shí)現(xiàn)不同符號分隔數(shù)字,可自定義分隔后數(shù)字保留的小數(shù)位數(shù)。
????使用正則,用數(shù)字中的小數(shù)點(diǎn)做匹配尾部參考,來匹配某個(gè)數(shù)字后面的一個(gè)或多個(gè)連續(xù)3位數(shù)字,如果匹配到把該數(shù)字替換成自身加分隔符,如下:
示例
1、 分隔數(shù)字:123456.1
解釋:3和.之間有一個(gè)連續(xù)3位數(shù)字(456),那么給3后面添加一個(gè)分隔符得到結(jié)果:123,456.1。
2、分隔數(shù)字:1234567.1
解釋:1和.之間有兩個(gè)連續(xù)3位數(shù)字(234和567),那么給1后面添加一個(gè)分隔符,然后數(shù)字4后面也存在一個(gè)連續(xù)三位數(shù)字(567),那么也給4后面添加一個(gè)分隔符,最終得到結(jié)果1,234,567.1
/(d)(?=(d{3})+.)/g; 這里最難理解的就是(?=(d{3})+.),且看語法: x(?=y):正向肯定查找,匹配后面帶有y的x項(xiàng)目 那么在這里意思是:查找一個(gè)和“.”之間帶有一個(gè)或多個(gè)連續(xù)3位數(shù)字的數(shù)字(x)
/** *num 要分隔的數(shù)字(必填) *n 保留的小數(shù)位數(shù)(可選) *symbol 分隔數(shù)字使用的符號(可選,默認(rèn)為",") */ function splitNum(num,n,symbol) { if(!num)throw new Error("splitNum需要傳入一個(gè)待轉(zhuǎn)換的數(shù)據(jù)"); if(typeof num!=="number")throw new TypeError("num參數(shù)應(yīng)該是一個(gè)number類型"); if(n<0)throw new Error("參數(shù)n不應(yīng)該小于0"); var hasDot=parseInt(num)!=num;//這里檢測num是否為小數(shù),true表示小數(shù) var m=(n!=undefined&&n!=null)?n:1; num=m==0?num.toFixed(m)+".":hasDot?(n?num.toFixed(n):num):num.toFixed(m); symbol=symbol||","; num=num.toString().replace(/(d)(?=(d{3})+.)/g,function(match, p1,p2) { return p1 + symbol; }); if(n==0||(!hasDot&&!n)){//如果n為0或者傳入的num是整數(shù)并且沒有指定整數(shù)的保留位數(shù),則去掉前面操作中的小數(shù)位 num=num.substring(0,num.indexOf(".")); } return num; }
難點(diǎn)解惑
1、也許有人會問,這里是用“.”號做參考進(jìn)行匹配的,如果傳進(jìn)來的數(shù)字是一個(gè)整數(shù)呢,不就沒“.”號了嗎,所以在方法內(nèi)部定義了m變量使其在操作過程中總能有個(gè)“.”號。
2、num=m==0?num.toFixed(m)+".":hasDot?(n?num.toFixed(n):num):num.toFixed(m);
num=m==0?num.toFixed(m)+".":hasDot?(n?num.toFixed(n):num):num.toFixed(m); 作用:這里的操作保證的是小數(shù)傳n、小數(shù)不傳n、整數(shù)傳n、整數(shù)不傳n四種情況都能正確返回小數(shù)位數(shù) 詳解: 1、如果m為零(傳入n=0)則直接經(jīng)toFixed操作后再后面補(bǔ)“.” 2、如果m不為0, a、如果傳入數(shù)為小數(shù) a"、如果傳了n表示要保留小數(shù),那么需要num.toFixed(n) b"、如果沒傳n表示不需要對小數(shù)進(jìn)行操作,直接返回原num b、如果傳入數(shù)為整數(shù) a"、直接對num進(jìn)行toFixed(m)操作
說明:該方法只適用于常用數(shù)字的操作,當(dāng)數(shù)字超過一定位數(shù)時(shí)產(chǎn)生的精度問題這里暫不做處理
自己寫的方法,如果有什么不足之處歡迎指出交流,這里的replace方法可參考我的另一篇文章補(bǔ)充:更簡單的原生方法
number類型可調(diào)用toLocalString()方法把他轉(zhuǎn)成本地語言環(huán)境格式顯示,經(jīng)測試是可行的,但不需要攜帶參數(shù),因?yàn)檫@些參數(shù)還是具有一定兼容性問題的,直接可以像下面使用,具體參見MDN:
var number=1234567891.23; console.log(number.toLocaleString());//1,234,567,891.23
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107264.html
摘要:前言本章介紹數(shù)值的擴(kuò)展。本章原文鏈接數(shù)值的擴(kuò)展進(jìn)制表示法提供了二進(jìn)制和八進(jìn)制數(shù)值的新的寫法,分別用前綴或和或表示??茖W(xué)計(jì)數(shù)法里面,表示指數(shù)的或前后不能有分隔符。函數(shù)返回?cái)?shù)值的雙曲余弦函數(shù)可用表示。與數(shù)值的類型不同。 前言本章介紹數(shù)值的擴(kuò)展。新增了很多方法,有些不常用的方法了解即可。本章原文鏈接:數(shù)值的擴(kuò)展進(jìn)制表...
摘要:上次講到是如何解析大整數(shù)的,一筆帶過了的處理,再詳細(xì)閱讀該函數(shù)的源碼,以下是小分析??偨Y(jié)閱讀完這個(gè)函數(shù)的源碼,學(xué)習(xí)到的是浮動數(shù)與字符串的互相轉(zhuǎn)換的實(shí)現(xiàn)細(xì)節(jié),字符串與浮點(diǎn)數(shù)之間的關(guān)系較復(fù)雜,之后還要繼續(xù)學(xué)習(xí)。 上次講到PHP是如何解析大整數(shù)的,一筆帶過了number_format的處理,再詳細(xì)閱讀該函數(shù)的源碼,以下是小分析。 函數(shù)原型 string number_format ( flo...
摘要:對于對象,方法返回一個(gè)該正則表達(dá)式的字面量。顯示顯示正則表達(dá)式在的應(yīng)用一個(gè)在字符串中執(zhí)行查找匹配的方法,它返回一個(gè)數(shù)組或者在未匹配到時(shí)返回。 為什么要用正則表達(dá)式 簡單的說:我們與字符串接觸的頻率非常之高,正則表達(dá)式可以極大的提高復(fù)雜文本分析的效率,快速匹配出復(fù)雜的字符串。 創(chuàng)建一個(gè)正則表達(dá)式 直接量語法(字面量) var expression = /pattern/flags ;...
摘要:正則引言正則是一個(gè)前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導(dǎo)致面試經(jīng)常坐蠟。這里上篇先介紹正則的規(guī)則,下篇結(jié)合一些具體題目,帶大家重新學(xué)習(xí)鞏固一下正則,爭取面試給自己加分。 正則 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 正則是一個(gè)前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導(dǎo)致面...
閱讀 2500·2021-11-25 09:43
閱讀 2611·2021-11-16 11:50
閱讀 3293·2021-10-09 09:44
閱讀 3203·2021-09-26 09:55
閱讀 2843·2019-08-30 13:50
閱讀 1031·2019-08-29 13:24
閱讀 2081·2019-08-26 11:44
閱讀 2805·2019-08-26 11:37