zoukankan      html  css  js  c++  java
  • 数字每三位添加一个 ',' 的不同实现方式

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

    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 = {1,}

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

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

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

  • 相关阅读:
    并列显示
    vertical-align,text-align 和 align的区别
    实现水平垂直居中
    overflow属性
    float属性
    table 标签
    idea中修改默认maven
    使用host的方式来破解idea
    mysql分区
    mysql数据库设计规范
  • 原文地址:https://www.cnblogs.com/shapeY/p/10737550.html
Copyright © 2011-2022 走看看