千分位格式化数字
代码实现
// 使用千分位分隔符转换数字:找到一个位置,这个位置右边的数字数量是 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 的倍数”判断逗号的位置。