千分位分开数字并自定义保存小数位数

功用:可完成差别标记分开数字,可自定义分开后数字保存的小数位数。

完成思绪

    运用正则,用数字中的小数点做婚配尾部参考,来婚配某个数字背面的一个或多个一连3位数字,假如婚配到把该数字替换成本身加分开符,以下:

  • 示例

1、 分开数字:123456.1

诠释:3和.之间有一个一连3位数字(456),那末给3背面增加一个分开符获得效果:123,456.1。

2、分开数字:1234567.1

诠释:1和.之间有两个一连3位数字(234和567),那末给1背面增加一个分开符,然后数字4背面也存在一个一连三位数字(567),那末也给4背面增加一个分开符,终究获得效果1,234,567.1

婚配的正则表达式
/(\d)(?=(\d{3})+\.)/g;

这里最难明白的就是(?=(\d{3})+\.),且看语法:
x(?=y):正向肯定查找,婚配背面带有y的x项目

那末在这里意义是:查找一个和“.”之间带有一个或多个一连3位数字的数字(x)
终究完成
/**
 *num 要分开的数字(必填)
 *n 保存的小数位数(可选)
 *symbol 分开数字运用的标记(可选,默以为",")
 */ 
function splitNum(num,n,symbol) {
    if(!num)throw new Error('splitNum须要传入一个待转换的数据');
    if(typeof num!=='number')throw new TypeError('num参数应该是一个number范例');
    if(n<0)throw new Error('参数n不应该小于0');
    var hasDot=parseInt(num)!=num;//这里检测num是不是为小数,true示意小数
    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是整数而且没有指定整数的保存位数,则去掉前面操纵中的小数位
        num=num.substring(0,num.indexOf('.'));
    }
    return num;
}

难点解惑

  • 1、或许有人会问,这里是用“.”号做参考举行婚配的,假如传进来的数字是一个整数呢,不就没“.”号了吗,所以在要领内部定义了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);

作用:这里的操纵保证的是小数传n、小数不传n、整数传n、整数不传n四种状况都能准确返回小数位数
详解:
1、假如m为零(传入n=0)则直接经toFixed操纵后再背面补“.”
2、假如m不为0,
    a、假如传入数为小数
        a'、假如传了n示意要保存小数,那末须要num.toFixed(n)
        b'、假如没传n示意不须要对小数举行操纵,直接返回原num
    b、假如传入数为整数
        a'、直接对num举行toFixed(m)操纵

申明:该要领只适用于经常使用数字的操纵,当数字凌驾肯定位数时发生的精度题目这里暂不做处置惩罚

本身写的要领,假如有什么不足之处迎接指出交换,这里的replace要领可参考我的
另一篇文章

补充:更简朴的原生要领

number范例可挪用toLocalString()要领把他转成当地言语环境花样显现,经测试是可行的,但不须要照顾参数,由于这些参数照样具有肯定兼容性题目的,直接能够像下面运用,详细拜见MDN

var number=1234567891.23;
console.log(number.toLocaleString());//1,234,567,891.23
    原文作者:小前端
    原文地址: https://segmentfault.com/a/1190000013150060
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞