版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校課題活動策劃方案(3篇)
- 2026烏魯木齊市第三十六中學誠聘初高中教師(18人)參考考試題庫及答案解析
- 2026浙江臺州市緊急救援中心招聘編制外人員1人參考考試題庫及答案解析
- 2026年甘肅省慶陽市西峰環(huán)宇中學春季招聘教師備考考試題庫及答案解析
- 2026泰安岱岳區(qū)事業(yè)單位初級綜合類崗位招聘工作人員(99人)考試備考試題及答案解析
- 2026廣東中山市東鳳鎮(zhèn)佛奧幼兒園教職工招聘2人筆試模擬試題及答案解析
- 2026中鐵建昆侖高速公路運營管理有限公司德遂高速公路路巡隊員招聘1人(重慶)參考考試題庫及答案解析
- 2026上半年玉溪師范學院招聘6人參考考試題庫及答案解析
- 第四單元7靜夜思
- 三臺公安公開招聘60名警務輔助人員備考考試試題及答案解析
- 四川省南充市2024-2025學年高一上學期期末質量檢測英語試題(含答案無聽力原文及音頻)
- 專題08解題技巧專題:圓中輔助線的作法壓軸題三種模型全攻略(原卷版+解析)
- 2024年全國職業(yè)院校技能大賽(節(jié)水系統(tǒng)安裝與維護賽項)考試題庫(含答案)
- 24秋人教版英語七上單詞表(Vocabulary in Each Unit)總表
- ISO 15609-1 2019 金屬材料焊接工藝規(guī)程和評定-焊接工藝規(guī)程-電弧焊(中文版)
- 肥胖患者麻醉管理
- 小鯉魚跳龍門電子版
- 2019年急性腦梗死出血轉化專家共識解讀
- 《混凝土結構工程施工規(guī)范》
- 土地證延期申請書
- 硫乙醇酸鹽流體培養(yǎng)基適用性檢查記錄
評論
0/150
提交評論