正则表达式处理每三位数字加逗号的问题

希望实现浮点数字每三位加一个逗号
网上的做法很多,看了一些,但是还是想按着自己的思路自己写

let str = "8432957983475934.84378";
let reg = new RegExp(/(?<=\d)(?=(\d{3})+(\.\d+)?$)/,'g');
console.log(str.replace(reg,','));

输出是:

8,432,957,983,475,934.84,378

目前小数点前都是对的 但是小数点后应该是不出现逗号的
麻烦大神帮忙改改

阅读 914
评论 更新于 2019-04-10
    5 个回答
    function formatNumber(str){
        let reg = new RegExp(/(?<=\d)(?=(\d{3})+(\.\d+)?$)/,'g');
        let i = str.indexOf('.');
        return str.replace(reg,(...args)=>args[args.length-2]<i|i==-1?",":"");
    }
    评论 赞赏 2019-04-10
      let reg = new RegExp(/(?<=\d)(?=(\d{3})+\.(.\d+)?$)/,'g');
      
      评论 赞赏 2019-04-10
        Suieu
        • 542

        正则的问题出在最后的问号上,才会造成小数点后也会被匹配到。

        console.log(new Intl.NumberFormat(navigator.language, {maximumFractionDigits:20}).format(1234567890.123456789));

        评论 赞赏 2019-04-10
          ezmo
          • 6.9k

          给你个最直观思路(兼容整数):

          1. 整数部分转成字符串,倒序后,每3位添加一个逗号,然后再倒序即完成了整数的切割。
          2. 将处理好的整数 连接 右侧小数部分即可
          var str = "8432957983475934.84378"
          var result = str.split(".")[0].split('').reverse().join('').replace(/(\d{3})/g, '$1,').split('').reverse().join('') + str.replace(/(\d+\b)/,'');
          console.log(result);
          评论 赞赏 2019-04-10
            评论 赞赏 2019-04-17
              撰写回答

              登录后参与交流、获取后续更新提醒