js金額千分位的6種實現(xiàn)方法實例_第1頁
js金額千分位的6種實現(xiàn)方法實例_第2頁
js金額千分位的6種實現(xiàn)方法實例_第3頁
js金額千分位的6種實現(xiàn)方法實例_第4頁
js金額千分位的6種實現(xiàn)方法實例_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第js金額千分位的6種實現(xiàn)方法實例目錄方法一數(shù)組分割法方法二字符截取法方法三求模法方法四正則表達式(先行斷言)方法五通過Intl.NumberFormat方法六number.toLocaleString方式總結

方法一數(shù)組分割法

這種方法也是自己最容易想到的一種方式,通過將數(shù)組以點分割,然后按照3位一體進行字符的拼接

functionformat_with_array(number){

//轉為字符串,并按照.拆分

constarr=(number+'').split('.');

//整數(shù)部分再拆分

constint=arr[0].split('');

//小數(shù)部分

constfraction=arr[1]||'';

//返回的變量

letr='';

int.reverse().forEach(function(v,i){

//非第一位并且是位值是3的倍數(shù),添加“,”

if(i!==0i%3===0){

r=v+','+r;

}else{

//正常添加字符(這是好寫法)

r=v+r;

//整數(shù)部分和小數(shù)部分拼接

returnr+(!!fraction'.'+fraction:'');

//測試用例

console.log(format_with_array(1234567893.99));

方法二字符截取法

字符截取法,具體看看注釋

functionformat_with_substring(number){

//數(shù)字轉為字符串,并按照.分割

letarr=(number+'').split('.');

letint=arr[0]+'';

letfraction=arr[1]||'';

//多余的位數(shù)

letf=int.length%3;

//獲取多余的位數(shù),f可能是0,即r可能是空字符串

letr=int.substring(0,f);

//每三位添加','金額對應的字符

for(leti=0;iMath.floor(int.length/3);i++){

r+=','+int.substring(f+i*3,f+(i+1)*3);

//多余的位數(shù),上面

if(f===0){

r=r.substring(1);

//調整部分和小數(shù)部分拼接

returnr+(!!fraction'.'+fraction:'');

console.log(format_with_substring(12112123313.78));

方法三求模法

這種方法按照用1000求模取末尾3位,然后用除法判斷是否還有剩余位數(shù)的方法去做的,這種方法性能也是最好的,推薦大家使用!

functionformat_with_mod(number){

letn=number;

letr='';

lettemp='';

do{

//求模的值,用于獲取高三位,這里可能有小數(shù)

mod=n%1000;

//值是不是大于1,是繼續(xù)的條件

n=n/1000;

//高三位

temp=~~mod;

//1.填充:n1循環(huán)未結束,就要填充為比如1=001

//不然temp=~~mod的時候,1001,就會變成"11"

//2.拼接“,”

r=(n=1`${temp}`.padStart(3,'0'):temp)+(!!r','+r:'');

}while(n=1);

conststrNumber=number+'';

letindex=strNumber.indexOf('.');

//拼接小數(shù)部分

if(index=0){

r+=strNumber.substring(index);

returnr;

console.log(format_with_mod(1234567893.99));

方法四正則表達式(先行斷言)

說這種方法前,我們來了解下什么是先行斷言吧!看例子。

有以下字符串:我愛你我愛愛愛你

如果要取出愛字,要求這個愛字后面有你,這個時候就要這么寫,這就是先行斷言:

我愛你我愛愛愛你.match(/愛(=你)/g)//[愛,愛]

如果要求愛字后面沒有你,那自然也有先行否定斷言:

我愛你我愛愛愛你.match(/愛(!你)/g)//[愛,愛],因為匹配相同...

這個時候,如果要求愛字后面有你,前面還要有我,那就要用到后行斷言了,如下:

我愛你我愛愛愛你.match(/(=我)愛(=你)/g)//[愛]

最后,如果要求愛字前面沒有我,后面也沒有我,那就要用到先行否定斷言和**后行否定斷言,**如下:

我愛你我愛愛愛你.match(/(!我)愛(!你)/g)//[愛]

所以正則表達式還是比較靈活的,接下來,讓我們一起來瞅瞅正則表達式是如何來玩千分位的,上代碼。

functionformat_with_regex(number){

return!(number+'').includes('.')

//就是說1-3位后面一定要匹配3位

(number+'').replace(/\d{1,3}(=(\d{3})+$)/g,(match)={

returnmatch+',';

:(number+'').replace(/\d{1,3}(=(\d{3})+(\.))/g,(match)={

returnmatch+',';

console.log(format_with_regex(1243250.99));

第四行d{1,3}數(shù)字出現(xiàn)1-3次,后面緊緊跟隨著3個數(shù)字,如1243250,首先243前面有1,符合條件所以是1,243;后面250前面是243符合條件,所以是1,243,250

方法五通過Intl.NumberFormat

這種方法是我在往上無意種發(fā)現(xiàn)的,使用這種方式會導致函數(shù)不斷的初始化,會導致性能上的問題。

functionformat_with_Intl(

number,

minimumFractionDigits,

maximumFractionDigits

minimumFractionDigits=minimumFractionDigits||2;

minimumFractionDigits=maximumFractionDigits||2;

maximumFractionDigits=Math.max(

minimumFractionDigits,

maximumFractionDigits

returnnewIntl.NumberFormat('en-us',{

maximumFractionDigits:maximumFractionDigits||2,

minimumFractionDigits:minimumFractionDigits||2,

}).format(number);

console.log(format_with_Intl(123456789.98));

方法六number.toLocaleString方式

這個是通過js帶的api來的,和方法五一樣會有性能上的問題。

functionformat_with_toLocalString(

number,

minimumFractionDigits,

maximumFractionDigits

minimumFractionDigits=minimumFractionDigits||2;

minimumFractionDigits=maximumFractionDigits||2;

maximumFractionDigits=Math.max(

minimumFractionDigits,

maximumFractionDigits

returnnum

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論