数字每三位添加一个 ‘,’ 的不同实现方式

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。数字每三位添加一个 ‘,’ 的不同实现方式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

处理数值,为每三位数加一个逗号,兼容浮点型数值

1234567.123412345678为例

  • 通过内置方法实现
    function addComma(num = 0){
        let temps = num.toString().split('.'), //处理浮点数的情况,整数时会返回原数值
            target = temps[0].split('').reverse(), //倒序
            lastIndex = target.length;
        return target.map((item,index) => { 
                        //第三个就增加一个',',要注意最后一个数字不添加
                        return ((index+1) % 3 === 0 && (index !== lastIndex - 1)) ? (','+ item) : item;
                    })
                    .reverse() //倒序回来
                    .join('') + (temps[1] ? '.' + temps[1] : ''); //如果是浮点数,就再加上小数部分
    }

    addComma(1234567.1234) //1,234,567.1234
    addComma(12345678)     //12,345,678
  • 通过正则表达式
    function addComma(num = 0){
        let reg = num.toString().indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(\d{3})+$)/g;

        return num.toString().replace(reg,'$1,');
    }

    addComma(1234567.1234) //1,234,567.1234
    addComma(12345678)     //12,345,678

利用正则表达式来处理的思路:

  • 整数和浮点数是有差别的,整数从最右边开始算,浮点数要从小数点’.’开始算
  • 字符串分为两部分,右边是3*n位数字,左边的部分添加’,’。n =

右边的部分很好匹配:/(\d{3})+/ , 再加上开始算的符号,浮点数要加上 \..匹配除换行符之外的任何单个字符,加上\.转义,就是匹配’.’)。整数加上$结束符。

左边的部分,必须依赖于右边的部分。比如说必须右边有三位,左边才会匹配成功,加一个’,’。就需要用到?=正向肯定查找(x(?=y)仅当x后面跟着y时才会匹配x)。(\d)(?=y) y就是右边的部分。

再加上全局搜索的标志 g,不然只会匹配一组,只加一个’,’。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/229217.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!