欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端提高篇(十三)练习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));

效果:
前端提高篇(十三)练习4:自定义求和函数
sum += parseFloat(arguments[i]) || 0;这一步,直接将除了数字、数字值的字符串以外的类型全都处理了,厉害!

sum = sum.toFixed(3) * 1000 / 1000;这一步,将小数相加时,后面多余的不精准的部分去掉,

本来0.1+0.2会得出0.30000000000000004这样的数,如果只有toFixed指定保留的小数位,尾部也会有多余的0,乘1000再除1000,效果太强了

上一篇:

下一篇: