问题
1234567890.12 变成 1,234,567,890.12
分析:
1.将字符串分成两部分成整数 和 小数两部分
2.整数部分从后向前每三位添加一个','
3.对字符串的处理,不会改变原字符串,故采用拼接字符串
- 非正则
1.indexof('.') 分割字符串 同时要注意没有小数的情况
2.循环添加',' 注意结束条件
3.最后在将 3 个部分合并
function fn(str){
var ilen = str.indexOf('.');
ilen = (ilen === -1) ? str.length :ilen
var newstr='';
for(var i = ilen ; i > 3 ; i-=3){
newstr = ',' + str.slice(i-3,i) + newstr;
}
newstr = str.slice(0,i) + newstr + str.slice(ilen);
return newstr;
}
console.log(fn("234"))
- 正则
1.indexOf(',') 分割字符串
2.对3求余 ,判断正则替换开始的位置
3. 拼接3个部分的字符串
function fn1(str){
var ilen = str.indexOf('.');
ilen = (ilen === -1) ? str.length :ilen;
var i = ilen % 3 ? ilen % 3 : 3;
var regStr = str.slice(i,ilen);
var newstr = regStr.replace(/(\d{3})/g,',$1');
newstr = str.slice(0,i) + newstr + str.slice(ilen);
return newstr;
}
console.log(fn1("23"))
- 总结
1. 没有小数点的情况,两种方法处理一样
ilen = (ilen === -1) ? str.length : ilen;
2. 整数部分 刚好只有3位数情况
非正则 :for 循环中 i > 3
正则: var i = ilen % 3 ? ilen % 3 : 3;
避免出现 fn("234") // ,234
3.两种方法 都是将字符串分成3部分 进行处理拼接
[i <= 3] + [,234,567,890] + [.123456]