阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JavaScript 数字千分符

      需求

      对数字或者字符串进行千分符处理,写出核心代码就可以,能兼容处理更好;

      第一种字符串方法

      // 封装为方法,方便维护,尽量不要改写默认对象的原型
      function thousand(arg) {
          // 转换成字符
          arg = arg.toString();
          let count = 0;
          let strNew = '';
          // 从后向前加千分符,
          // 987,654,321 然后转为 123,456,789
          for (let i = (arg.length - 1); i >= 0; i--) {
              if (count % 3 === 0 && count != 0) {
                  strNew += ',';
              }
              strNew += arg.substr(i, 1);
              count++;
          }
          console.log('strNew', strNew);//987,654,321
          strNew = strNew.split('').reverse().join('');
          return strNew;
      }
      let str1 = '123456789';
      let str2 = '12345678';
      let str3 = '1234567';
      
      console.log(thousand(str1));//123,456,789
      console.log(thousand(str2));//12,345,678
      console.log(thousand(str3));//1,234,567
      
      

      第二种:正则方法

      // 封装为方法,方便维护,尽量不要改写默认对象的原型
      function thousand(arg) {
          // 转换成字符
          arg = arg.toString();
          // ((?:\d{3})+) => 匹配连续三个参数(从后面匹配的方式)
          // 前面可能存在0个,也可能存在,1个,2个,3个,但是如果是3个,就会被后面的正则匹配,所以匹配两个就好
          // 同时首位不能为0
          // ([1-9]\d{0,2})
          var reg = /^([1-9]\d{0,2})((?:\d{3})+)$/;
          var s = arg.replace(reg, function (...arg) {
              console.log('arg', arg);
              // arg[2].match(/\d{3}/g) 返回一个数组,数字加字符串,会默认用,隔开
              // (arg[2].match(/\d{3}/g)).join('-')
              return arg[1] + ',' + arg[2].match(/\d{3}/g);
          })
          return s;
      }
      
      
      let str1 = '123456789';
      let str2 = '12345678';
      let str3 = '1234567';
      
      console.log(thousand(str1));//123,456,789
      console.log(thousand(str2));//12,345,678
      console.log(thousand(str3));//1,234,567
      

      第二种:toLocaleString方法

      // 封装为方法,方便维护,尽量不要改写默认对象的原型
      function thousand(arg) {
          // toLocaleString 方法返回这个数字在特定语言环境下的表示字符串。
          // https://www.axihe.com/api/js-es/ob-number/to-locale-string.html
          // 此参数大小写不敏感,
          return (parseInt(arg)).toLocaleString("en")
      }
      
      
      let str1 = '123456789';
      let str2 = '12345678';
      let str3 = '1234567';
      
      console.log(thousand(str1));//123,456,789
      console.log(thousand(str2));//12,345,678
      console.log(thousand(str3));//1,234,567
      
      目录
      目录