文章目录
问题描述
最近面试遇到了一个数字格式转化的问题:把一个大数(位数很多)用金融数字样式表示。即使用千位分隔符 —— 三位一个逗号间隔。比如:
- 1234567890 --> 1,234,567,890
- 5236 --> 5,236
这种的数字格式生活中也是非常常见,比如支付宝花呗额度:

方案一:Number.prototype.toLocaleString()
toLocaleString()这个方法作用是把数字转换为字符串并使用三位分节法进行显示。如果是浮点数,还会进行四舍五入并保留三位小数的操作。
如果没有其他的格式要求,toLocaleString()绝对是最简单的方案。
function formatNumber(num){
return num.toLocaleString();
}
//测试
console.log(formatNumber(1384125862));
console.log(formatNumber(1234567890.125462));
//输出
1,384,125,862
1,234,567,890.125
方案二:正则表达式
这种字符串匹配的操作完全可以用正则表达式来解决。这里优化一点:如果是浮点数,还支持再传一个参数decimal来指定四舍五入后保留的小数位数。
function formatNumber(num,decimal){
let str = num.toFixed(decimal).toString();
let reg = str.indexOf(".") > -1 ? /(\d)(?=(\d

&spm=1001.2101.3001.5002&articleId=109518505&d=1&t=3&u=7f0edec02beb470595d02828a59b441e)
935

被折叠的 条评论
为什么被折叠?



