Suma, resta, multiplicación y división de javaScript (admite múltiples parámetros)

$(function () {
        console.log("加");
        console.log(1.9 + 1.9 + 1.9);
        console.log(accAdd(1.9, 1.9, 1.9));
        console.log("减");
        console.log(5.7 - 1.9);
        console.log(accSub(5.7, 1.9));
        console.log("乘");
        console.log(1.4 * 29 * 29);
        console.log(accMui(1.4, 29, 29));
        console.log("除");
        console.log(5.7 / 3);
        console.log(accDiv(5.7, 3));
    });

    //加法优化
    function accAdd(...args) {
        //var result;
        if (args.length > 0) {
            var result = args[0];
            for (var i = 1; i < args.length; i++) {
                var current, r1, r2, m, c;
                current = args[i];
                try {
                    r1 = result.toString().split(".")[1].length;
                } catch (e) {
                    r1 = 0;
                }
                try {
                    r2 = current.toString().split(".")[1].length;
                } catch (e) {
                    r2 = 0;
                }
                c = Math.abs(r1 - r2);    //取出两个数字小数位的差   abs()函数取绝对值
                m = Math.pow(10, Math.max(r1, r2));     //两个数字最后扩大的倍数
                if (c > 0) {     //c为两个数字小数长度的差的绝对值
                                // 大于0说明两个数字小数位数不同 不大于0说明相同
                    var cm = Math.pow(10, c);   //需要在小数少的数字后补零
                    if (r1 > r2) {   //分情况讨论,长度不同时,要在小数位数少的数字后补0
                        result = Number(result.toString().replace(".", ""));
                        current = Number(current.toString().replace(".", "")) * cm;
                    } else {
                        result = Number(result.toString().replace(".", "")) * cm;
                        current = Number(current.toString().replace(".", ""));
                    }
                } else {
                    result = Number(result.toString().replace(".", ""));
                    current = Number(current.toString().replace(".", ""));
                }
                result = (result + current) / m;
            }
            return result;
        }
    }

    //减法优化
    function accSub(...args) {
        if (args.length > 0) {
            var result = args[0];
            for (var i = 1; i < args.length; i++) {
                var r1, r2, m, n, current = args[i];
                try {
                    r1 = result.toString().split(".")[1].length;
                } catch (e) {
                    r1 = 0;
                }
                try {
                    r2 = current.toString().split(".")[1].length;
                } catch (e) {
                    r2 = 0;
                }
                c = Math.abs(r1 - r2);    //取出两个数字小数位的差   abs()函数取绝对值
                m = Math.pow(10, Math.max(r1, r2));     //两个数字最后扩大的倍数
                if (c > 0) {     //c为两个数字小数长度的差的绝对值
                    // 大于0说明两个数字小数位数不同   不大于0说明相同
                    var cm = Math.pow(10, c);   //需要在小数少的数字后补零
                    if (r1 > r2) {   //分情况讨论,长度不同时,要在小数位数少的数字后补0
                        result = Number(result.toString().replace(".", ""));
                        current = Number(current.toString().replace(".", "")) * cm;
                    } else {
                        result = Number(result.toString().replace(".", "")) * cm;
                        current = Number(current.toString().replace(".", ""));
                    }
                } else {
                    result = Number(result.toString().replace(".", ""));
                    current = Number(current.toString().replace(".", ""));
                }
                result = (result - current) / m;
            }
            return result;
        }
    }

    //乘法优化
    function accMui(...args) {
        if (args.length > 0) {
            var result = args[0];
            for (var i = 1; i < args.length; i++) {
                var m = 0, current = args[i], s1 = result.toString(), s2 = current.toString();
                try {
                    m += s1.split(".")[1].length;
                } catch (e) {
                }
                try {
                    m += s2.split(".")[1].length;
                } catch (e) {
                }
                result = Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
            }
            return result;
        }
    }

    //除法优化
    function accDiv(...args) {
        if (args.length > 0) {
            var result = args[0];
            for (var i = 1; i < args.length; i++) {
                var t1 = 0, t2 = 0, r1, r2, current = args[i];
                try {
                    t1 = result.toString().split(".")[1].length;
                } catch (e) {
                }
                try {
                    t2 = current.toString().split(".")[1].length;
                } catch (e) {
                }
                r1 = Number(result.toString().replace(".", ""));
                r2 = Number(current.toString().replace(".", ""));
                if (t1 > t2) {   //如果t1>t2  说明数字1扩大的倍数大,
                                // 导致r1/r2的结果变大 反之变小
                    result = (r1 / r2) / Math.pow(10, t1 - t2);
                } else {
                    result = (r1 / r2) * Math.pow(10, r2 - r1);
                }
            }
            return result;
        }
    }

resultado de la operación:

 

Supongo que te gusta

Origin blog.csdn.net/m0_63393739/article/details/125946757
Recomendado
Clasificación