在開(kāi)發(fā)網(wǎng)頁(yè)時(shí),經(jīng)常會(huì)用到數(shù)值的顯示,如果數(shù)值比較大,為了使它更易于閱讀,一般會(huì)使用千分位進(jìn)行分隔。JavaScript提供了方便的方法來(lái)對(duì)數(shù)值進(jìn)行千分位的格式化。
對(duì)于一個(gè)數(shù)字1234567,如果不使用千分位的話,會(huì)顯示成這樣:1234567。代碼如下:
var num = 1234567; document.write(num);
我們可以使用JavaScript代碼將其格式化成千分位表示:1,234,567。代碼如下:
function thousandSeparator(num){ var parts = num.toString().split("."); parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); return parts.join("."); } var num = 1234567; document.write(thousandSeparator(num)); //輸出1,234,567
這段代碼比較復(fù)雜,我們來(lái)看看它具體是如何實(shí)現(xiàn)的:
- 首先將數(shù)字轉(zhuǎn)換為字符串,然后使用split()方法將整數(shù)部分和小數(shù)部分分離出來(lái)。
- 對(duì)于整數(shù)部分,使用正則表達(dá)式/\B(?=(\d{3})+(?!\d))/g,將其中每三個(gè)數(shù)字作為一個(gè)整體進(jìn)行匹配,\B表示非單詞邊界,\d表示數(shù)字,{3}表示連續(xù)出現(xiàn)三次,(?!\\d)表示斷言此位置后面不跟數(shù)字,這樣就匹配了每三個(gè)數(shù)字加不跟數(shù)字的情況。
- 然后將整數(shù)部分和小數(shù)部分拼接起來(lái),使用join()方法。
以上是一種比較通用的千分位格式化方式。當(dāng)然,還可以通過(guò)一些插件或工具來(lái)實(shí)現(xiàn)相同的效果,比如jQuery插件“numberformatter”:
var num = 1234567; var formattedNum = $.formatNumber(num, {format:"#,###", locale:"us"}); document.write(formattedNum); //輸出1,234,567
這段代碼中,我們使用了jQuery庫(kù)提供的一個(gè)插件numberformatter。其中format表示格式化的樣式,#,###表示每三個(gè)數(shù)字一個(gè)千分位分隔符,locale表示數(shù)字格式化的本地化,us表示美國(guó)本地化。
千分位的格式化在一些場(chǎng)景下也常用于計(jì)算金額或百分比時(shí)的顯示。例如:將12.3456789轉(zhuǎn)換為12.346。
var num = 12.3456789; num = num.toFixed(3); //截取三位小數(shù) num = parseFloat(num); num = num.toLocaleString(); document.write(num); //輸出12.346
以上代碼中,我們使用了toFixed()方法將數(shù)字四舍五入保留3位小數(shù),再使用parseFloat()方法將其轉(zhuǎn)換為浮點(diǎn)數(shù)。最后使用toLocaleString()方法將浮點(diǎn)數(shù)轉(zhuǎn)換為千分位格式化的字符串。
無(wú)論是使用原生JavaScript還是jQuery插件,千分位的格式化都是一個(gè)非常方便的技巧。可以更好地展示數(shù)值,并且方便開(kāi)發(fā)者進(jìn)行計(jì)算。在應(yīng)用中,根據(jù)需要選擇合適的實(shí)現(xiàn)方式即可。