跳到正文

手写练习/函数

GitHub

千分位格式化数字

简单字符串遍历数字

代码实现

JavaScript17 行
// 使用千分位分隔符转换数字:找到一个位置,这个位置右边的数字数量是 3 的倍数,然后插入逗号
function formatNumber(num) {
  const str = String(num);
  let result = "";

  for (let i = 0; i < str.length; i++) {
    if (i > 0 && (str.length - i) % 3 === 0) {
      result += ",";
    }

    result += str[i];
  }

  return result;
}

formatNumber(123456789); // "123,456,789"

笔记记录

千分位格式化数字

场景

订单金额、浏览量或统计数据展示时,常需要把长数字按每三位插入一个逗号,让人更容易阅读。

题目目标

实现 formatNumber:

formatNumber(123456789); // "123,456,789"

代码

// 使用千分位分隔符转换数字:找到一个位置,这个位置右边的数字数量是 3 的倍数,然后插入逗号
function formatNumber(num) {
  const str = String(num);
  let result = "";
 
  for (let i = 0; i < str.length; i++) {
    if (i > 0 && (str.length - i) % 3 === 0) {
      result += ",";
    }
 
    result += str[i];
  }
 
  return result;
}
 
formatNumber(123456789); // "123,456,789"

核心思路

先把数字转成字符串,再从左到右逐个读取字符。遍历到位置 i 时,str.length - i 就是当前位置右边(包含当前位置)还剩多少个字符。

当下面两个条件同时满足时,在当前字符前插入逗号:

  • i > 0:当前位置不是字符串开头,避免数字以逗号开头。
  • (str.length - i) % 3 === 0:从当前位置到末尾的字符数量是 3 的倍数。

例如遍历 123456789 时,会分别在 4 和 7 前插入逗号,最终得到 123,456,789。

记一下

这道题的关键不是从右向左重新拼接字符串,而是在从左向右遍历时,根据“当前位置右边的字符数量是否是 3 的倍数”判断逗号的位置。