js实现千位符
使用正则表达式实现千位符
通过正则表达式匹配数字并插入逗号,适用于整数或小数:
function formatNumberWithCommas(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
正则表达式解释:
\B匹配非单词边界(?=(\d{3})+(?!\d))正向预查,匹配后面跟着3的倍数个数字的位置
使用Number.prototype.toLocaleString
内置方法直接支持千位分隔符格式化:
function formatWithToLocaleString(num) {
return num.toLocaleString('en-US');
}
此方法会自动根据浏览器语言环境处理,'en-US'确保使用逗号作为分隔符。
处理小数部分的实现
需要保留小数时,可以拆分整数和小数部分分别处理:
function formatDecimalWithCommas(num) {
const parts = num.toString().split('.');
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join('.');
}
性能优化的实现
对于大量数据处理,使用纯字符串操作可能更高效:
function formatLargeNumbers(num) {
let str = num.toString();
let result = '';
let count = 0;
for (let i = str.length - 1; i >= 0; i--) {
result = str[i] + result;
count++;
if (count % 3 === 0 && i !== 0 && str[i-1] !== '-') {
result = ',' + result;
}
}
return result;
}
国际化的千位符处理
考虑不同地区的分隔符差异:
function internationalFormat(num, locale = 'en-US') {
return new Intl.NumberFormat(locale).format(num);
}
不同地区示例:
- 德国使用点作为分隔符:
internationalFormat(1234567.89, 'de-DE')→ "1.234.567,89" - 印度使用特殊分组:
internationalFormat(1234567.89, 'en-IN')→ "12,34,567.89"







