国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

千分位分隔數(shù)字并自定義保留小數(shù)位數(shù)

caoym / 2804人閱讀

摘要:實(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í)現(xiàn)思路

????使用正則,用數(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)(?=(d{3})+.)/g;

這里最難理解的就是(?=(d{3})+.),且看語法:
x(?=y):正向肯定查找,匹配后面帶有y的x項(xiàng)目

那么在這里意思是:查找一個(gè)和“.”之間帶有一個(gè)或多個(gè)連續(xù)3位數(shù)字的數(shù)字(x)
最終實(shí)現(xiàn)
/**
 *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

相關(guān)文章

  • ES6學(xué)習(xí) 第六章 數(shù)值的擴(kuò)展

    摘要:前言本章介紹數(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)制表...

    番茄西紅柿 評論0 收藏2637
  • [PHP源碼閱讀]number_format函數(shù)

    摘要:上次講到是如何解析大整數(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...

    itvincent 評論0 收藏0
  • 簡單學(xué)習(xí) JavaScript 正則表達(dá)式

    摘要:對于對象,方法返回一個(gè)該正則表達(dá)式的字面量。顯示顯示正則表達(dá)式在的應(yīng)用一個(gè)在字符串中執(zhí)行查找匹配的方法,它返回一個(gè)數(shù)組或者在未匹配到時(shí)返回。 為什么要用正則表達(dá)式 簡單的說:我們與字符串接觸的頻率非常之高,正則表達(dá)式可以極大的提高復(fù)雜文本分析的效率,快速匹配出復(fù)雜的字符串。 創(chuàng)建一個(gè)正則表達(dá)式 直接量語法(字面量) var expression = /pattern/flags ;...

    nevermind 評論0 收藏0
  • JS核心知識點(diǎn)梳理——正則篇(下)

    摘要:正則引言正則是一個(gè)前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導(dǎo)致面試經(jīng)常坐蠟。這里上篇先介紹正則的規(guī)則,下篇結(jié)合一些具體題目,帶大家重新學(xué)習(xí)鞏固一下正則,爭取面試給自己加分。 正則 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 正則是一個(gè)前端必須掌握的知識。但是由于用的少,忘了記,記了忘,導(dǎo)致面...

    jemygraw 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<