我提出了另一个解决方案。
第一个代码是这样的。
function formatNumber(number) {
if (number < 1000) {
return String(number);
}
if (number < 1000000) {
let numbers = String(number).split('');
numbers.splice(-3, 0, ',');
return numbers.join('');
}
if (number < 1000000000) {
let numbers = String(number).split('');
numbers.splice(-3, 0, ',');
numbers.splice(-7, 0, ',');
return numbers.join('');
}
if (number < 1000000000000) {
let numbers = String(number).split('');
numbers.splice(-3, 0, ',');
numbers.splice(-7, 0, ',');
numbers.splice(-11, 0, ',');
return numbers.join('');
}
throw new Error(`number: ${number} is too big`);
}
这段代码很长,不可伸缩,但它很有效,因为它检查的是数字本身,而不是从数字转换的字符串的长度。
所以我基于这个想法转换成了整洁的代码。(你可以再放大12个以防出错。)
function formatNumber(number) {
let commas = -1;
for (let n3 = 3; n3 <= 12; n3 += 3) {
commas++;
const max = Math.pow(10, n3);
if (number < max) {
let numbers = String(number).split('');
for (let i = 0; i < commas; i++) {
numbers.splice(-(3 * (i + 1) + i), 0, ',');
}
return numbers.join('');
}
}
throw new Error(`number: ${number} is too big`);
}