Number.prototype.toLocaleString() <不支持大数>
缺点: 存在局限性,不支持大数
var n = 12345678;
n.toLocaleString();
// "12,345,678"
(12345678.898).toLocaleString();
// "12,345,678.898"
正则
function thousands(num) {
var str = num.toString();
var reg = str.indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g;
// var reg = new RegExp(/(\d)(?=(\d{3})+(?!\d))/, 'g');
return str.replace(reg, '$1,');
}
console.log(thousands(7654321));
console.log(thousands(1234567.1234567));
// 7,654,321
// 1,234,567.1234567
思路:
- 区分带小数、不带小数
不带小数
写法2
var reg = new RegExp(/(\d)(?=(\d{3})+(?!\d))/, 'g');
return str.replace(reg, '$1,');
📢 上下区别
var reg = new RegExp(/\B(?=(\d{3})+(?!\d))/, 'g');
return str.replace(reg, ',');
带小数
正则知识补充
先行断言 ?=
正向否定查找 ?!
非捕获括号 ?:
字符串
// 1. 提取整数部分
// 2. 整数转数组逐个遍历
// 3. 拼接字符串并返回
function thousands(num) {
var splits = [],
ans = [];
var splits = num.toString().split('.');
splits[0]
.split('')
.reverse()
.map(function (item, i) {
if (i % 3 == 0 && i != 0) {
ans.push(',');
}
ans.push(item);
});
return ans.reverse().join('') + (splits.length > 1 ? '.' + splits[1] : '');
}
console.log(thousands(7654321));
// 7,654,321
console.log(thousands(1234567.1234567));
// 1,234,567.1234567