image.png

Number.prototype.toLocaleString() <不支持大数>

缺点: 存在局限性,不支持大数

  1. var n = 12345678;
  2. n.toLocaleString();
  3. // "12,345,678"
  4. (12345678.898).toLocaleString();
  5. // "12,345,678.898"

正则

  1. function thousands(num) {
  2. var str = num.toString();
  3. var reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g;
  4. // var reg = new RegExp(/(\d)(?=(\d{3})+(?!\d))/, 'g');
  5. return str.replace(reg, '$1,');
  6. }
  7. console.log(thousands(7654321));
  8. console.log(thousands(1234567.1234567));
  9. // 7,654,321
  10. // 1,234,567.1234567

思路:

  1. 区分带小数、不带小数

不带小数
reg.png
写法2

  1. var reg = new RegExp(/(\d)(?=(\d{3})+(?!\d))/, 'g');
  2. return str.replace(reg, '$1,');

reg3.png
📢 上下区别

  1. var reg = new RegExp(/\B(?=(\d{3})+(?!\d))/, 'g');
  2. return str.replace(reg, ',');

reg5.png

带小数
reg2.png

正则知识补充

先行断言 ?=

截屏2022-05-31 上午9.47.29.png

正向否定查找 ?!

截屏2022-05-31 上午9.47.45.png

非捕获括号 ?:

截屏2022-05-31 上午9.57.16.png

字符串

  1. // 1. 提取整数部分
  2. // 2. 整数转数组逐个遍历
  3. // 3. 拼接字符串并返回
  4. function thousands(num) {
  5. var splits = [],
  6. ans = [];
  7. var splits = num.toString().split('.');
  8. splits[0]
  9. .split('')
  10. .reverse()
  11. .map(function (item, i) {
  12. if (i % 3 == 0 && i != 0) {
  13. ans.push(',');
  14. }
  15. ans.push(item);
  16. });
  17. return ans.reverse().join('') + (splits.length > 1 ? '.' + splits[1] : '');
  18. }
  19. console.log(thousands(7654321));
  20. // 7,654,321
  21. console.log(thousands(1234567.1234567));
  22. // 1,234,567.1234567

🔚 2020-5-8

image.png