数据处理——给数字加千分位标识

千分位添加的方式,一般都是数组截取法,字符串截取法等等,但存在当为负数金额的时候,可能会存在 -,123.33 的情况,还需要考虑到负数的情况。(考虑情况较多)。使用正则匹配转化会省略考虑到一些情况,方便使用。下面我将正则法,数组转化截取法(字符串截取转化法和数组截取转化原理相同)的代码发在下面:

定义一个函数 moneyRegex ,形参number是要处理的金额数据,fix是需要对数据保留的小数位数。

正则法:建议使用正则匹配的方式添加千分位,可以直接避免负数、数组字符串之间转化的情况。如下代码:(推荐)

        function moneyRegex(number,fix) {
            if(fix){    //当传入保留小数位数时,先讲number保留相应相应小数,再添加千分位
                number=number.toFixed(fix)
            }
            return !(number + '').includes('.') ?
                (number + '').replace(/\d{1,3}(?=(\d{3})+$)/g, (match) => {
                    return match + ',';
                }) :
                (number + '').replace(/\d{1,3}(?=(\d{3})+(\.))/g, (match) => {
                    return match + ',';
                })
        }


        console.log(moneyRegex(-122120101.23212564));

打印结果:

定义一个函数 moneyArray,形参number是要处理的金额数据,fix是需要对数据保留的小数位数。

数组转化截取法:

        function moneyArray(number,fix) {
            //0. 保留的小数位数
            if(fix){
                number=number.toFixed(fix)
            }
            //1. 先判断是否是负数
            let isMinus=String(number).split('')[0]==='-';
            let data=isMinus?String(number).split('').splice(1).join(''):number;
            //2. 转为字符串,并按照.拆分
            const arr = (data + '').split('.');
            //3. 整数部分再拆分
            const int = arr[0].split('');
            //4. 小数部分
            const fraction = arr[1] || '';
            //5. 返回的变量
            let r = '';
            int.reverse().forEach(function(v, i) {
                // 非第一位并且是位值是3的倍数,添加,
                if (i !== 0 && i % 3 === 0) {
                    r = v + ',' + r;
                } else {
                    r = v + r;
                }
            });
            //6. 负号,整数部分和小数部分拼接
            return isMinus ? '-'+ r + (!!fraction ? '.' + fraction : '') : r + (!!fraction ? '.' + fraction : '');
        }


        console.log(moneyArray(-122120201.23212564,2));

打印结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值