成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

caoym / 2923人閱讀

摘要:實現(xiàn)思路使用正則,用數(shù)字中的小數(shù)點做匹配尾部參考,來匹配某個數(shù)字后面的一個或多個連續(xù)位數(shù)字,如果匹配到把該數(shù)字替換成自身加分隔符,如下示例分隔數(shù)字解釋和之間有一個連續(xù)位數(shù)字,那么給后面添加一個分隔符得到結果。

功能:可實現(xiàn)不同符號分隔數(shù)字,可自定義分隔后數(shù)字保留的小數(shù)位數(shù)。
實現(xiàn)思路

????使用正則,用數(shù)字中的小數(shù)點做匹配尾部參考,來匹配某個數(shù)字后面的一個或多個連續(xù)3位數(shù)字,如果匹配到把該數(shù)字替換成自身加分隔符,如下:

示例

1、 分隔數(shù)字:123456.1

解釋:3和.之間有一個連續(xù)3位數(shù)字(456),那么給3后面添加一個分隔符得到結果:123,456.1。

2、分隔數(shù)字:1234567.1

解釋:1和.之間有兩個連續(xù)3位數(shù)字(234和567),那么給1后面添加一個分隔符,然后數(shù)字4后面也存在一個連續(xù)三位數(shù)字(567),那么也給4后面添加一個分隔符,最終得到結果1,234,567.1

匹配的正則表達式
/(d)(?=(d{3})+.)/g;

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

那么在這里意思是:查找一個和“.”之間帶有一個或多個連續(xù)3位數(shù)字的數(shù)字(x)
最終實現(xiàn)
/**
 *num 要分隔的數(shù)字(必填)
 *n 保留的小數(shù)位數(shù)(可選)
 *symbol 分隔數(shù)字使用的符號(可選,默認為",")
 */ 
function splitNum(num,n,symbol) {
    if(!num)throw new Error("splitNum需要傳入一個待轉換的數(shù)據(jù)");
    if(typeof num!=="number")throw new TypeError("num參數(shù)應該是一個number類型");
    if(n<0)throw new Error("參數(shù)n不應該小于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;
}
難點解惑

1、也許有人會問,這里是用“.”號做參考進行匹配的,如果傳進來的數(shù)字是一個整數(shù)呢,不就沒“.”號了嗎,所以在方法內(nèi)部定義了m變量使其在操作過程中總能有個“.”號。

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操作后再后面補“.”
2、如果m不為0,
    a、如果傳入數(shù)為小數(shù)
        a"、如果傳了n表示要保留小數(shù),那么需要num.toFixed(n)
        b"、如果沒傳n表示不需要對小數(shù)進行操作,直接返回原num
    b、如果傳入數(shù)為整數(shù)
        a"、直接對num進行toFixed(m)操作

說明:該方法只適用于常用數(shù)字的操作,當數(shù)字超過一定位數(shù)時產(chǎn)生的精度問題這里暫不做處理

自己寫的方法,如果有什么不足之處歡迎指出交流,這里的replace方法可參考我的另一篇文章
補充:更簡單的原生方法

number類型可調(diào)用toLocalString()方法把他轉成本地語言環(huán)境格式顯示,經(jīng)測試是可行的,但不需要攜帶參數(shù),因為這些參數(shù)還是具有一定兼容性問題的,直接可以像下面使用,具體參見MDN:

var number=1234567891.23;
console.log(number.toLocaleString());//1,234,567,891.23

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/107264.html

相關文章

  • ES6學習 第六章 數(shù)值的擴展

    摘要:前言本章介紹數(shù)值的擴展。本章原文鏈接數(shù)值的擴展進制表示法提供了二進制和八進制數(shù)值的新的寫法,分別用前綴或和或表示。科學計數(shù)法里面,表示指數(shù)的或前后不能有分隔符。函數(shù)返回數(shù)值的雙曲余弦函數(shù)可用表示。與數(shù)值的類型不同。 前言本章介紹數(shù)值的擴展。新增了很多方法,有些不常用的方法了解即可。本章原文鏈接:數(shù)值的擴展進制表...

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

    摘要:上次講到是如何解析大整數(shù)的,一筆帶過了的處理,再詳細閱讀該函數(shù)的源碼,以下是小分析。總結閱讀完這個函數(shù)的源碼,學習到的是浮動數(shù)與字符串的互相轉換的實現(xiàn)細節(jié),字符串與浮點數(shù)之間的關系較復雜,之后還要繼續(xù)學習。 上次講到PHP是如何解析大整數(shù)的,一筆帶過了number_format的處理,再詳細閱讀該函數(shù)的源碼,以下是小分析。 函數(shù)原型 string number_format ( flo...

    itvincent 評論0 收藏0
  • 簡單學習 JavaScript 正則表達式

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

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

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

    jemygraw 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<