同学前端面试遇到这么一个题目 :给数字添加千分位分隔符
一拿到他给的面试题,感觉挺容易的,不过等自己写后发现非常考虑逻辑,以及思维能力(我是小白)
上网百度了一波全是用正则表达式来解决的,正则这块我只懂皮毛,所以感觉有点看不明白,不过这个博客解释挺清楚的使用正则表达式实现千位分割符
我这个人就是有一个毛病,感兴趣的东西我就想以自己的思维写出来,所以以下是一个前端小白的解决思路:
将函数thousand的参数a看成3部分组合head,body,xiaoshu.列如:1314.520可当做1 314 .520这三部分组合而成。废话少说,代码如下:
<script>
function thousand(a){
var arr = new Array();
var xiaoshu = ""; //用来记录参数小数数值包括小数点
var zhengshu =""; //用来记录参数录整数数值
if(a<1000){ //当参数小于1000的时候直接返回参数
return a;
}else{
t = a.toString(); //将整数转换成字符串
if(t.indexOf('.')>0){ //如果参数存在小数,则记录小数部分与整数部分
var index = t.indexOf('.');
xiaoshu = t.slice(index,t.length);
zhengshu = t.slice(0,index);
}else{ //否则整数部分的值就等于参数的字符类型
zhengshu = t;
}
var num = parseInt(zhengshu.length/3); //判断需要插入千位分割符的个数
//将整数1234567890部分拆分为2部分,变量head:1 变量body:123456789
var head = zhengshu.slice(0,zhengshu.length-num*3);
if(head.length>0){ //如果head存在,则在head后面加个千位分隔符,
head += ',';
}
var body = zhengshu.slice(zhengshu.length-num*3,zhengshu.length);
//将body字符串123456789转换成一个字符数组arr2 = ['123','456','789']
var arr2 = new Array();
for(var i=0;i<num;i++){
arr2.push(body.slice(i*3,i*3+3));
}
body = arr2.join(','); //将数组arr2通过join(',') 方法,拼接成一个以逗号为间隔的字符串
zhengshu = head + body; //拼接整数部分
var result = zhengshu + xiaoshu; //最后拼接整数和小数部分
return result; //返回结果
}
}
console.log(thousand(665565656511325161.233333));
</script>
小白敬上!