前端提高篇(十三)练习4:自定义求和函数
程序员文章站
2024-01-04 21:02:16
...
要求:
1.任意个数
2.任意格式
3.能够计算以下
sum(1, 2) = 3;
sum(1, null, 3) = 4;
sum(1, 3, 'A') = 4;
sum(1, 3, '1') = 5;
sum(1, null, 3, false, true) = 4;
sum(0.1, 0.2) = 0.3;
我的版本:
function myAdd(){
var res = 0;
for (var i = 0; i < arguments.length; i++){
if (arguments[i] == null ){
continue;
}
else if (typeof(arguments[i]) == "string"){
if (!isNaN(arguments[i])){
res += parseInt(arguments[i]);
}
else {
continue;
}
}
else if (typeof(arguments[i]) == "boolean"){
continue;
}
else if (typeof(arguments[i] == "number")){
res += arguments[i];
continue;
}
}
return res;
}
var res = myAdd(1,2,null,3,'1','A',false,true)
console.log('res', res);
没有处理最后sum(0.1, 0.2) = 0.3,且很多冗余
答案版本:
function myAdd1(){
var sum = 0;
for(var i = 0; i < arguments.length; i++){
sum += parseFloat(arguments[i]) || 0;
}
sum = sum.toFixed(3) * 1000 / 1000;
return sum;
}
console.log(myAdd1(0.1, 0.2));
console.log(myAdd1(1,3,null,'1','A'));
console.log(myAdd1(1,3,false,true));
效果:sum += parseFloat(arguments[i]) || 0;
这一步,直接将除了数字、数字值的字符串以外的类型全都处理了,厉害!
sum = sum.toFixed(3) * 1000 / 1000;
这一步,将小数相加时,后面多余的不精准的部分去掉,
本来0.1+0.2会得出0.30000000000000004这样的数,如果只有toFixed指定保留的小数位,尾部也会有多余的0,乘1000再除1000,效果太强了