js 自定义加减乘除方法(防止js自身计算错误)

<!DOCTYPE html>
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
    </head>

    <body>
        <script type="text/javascript">
            /**
             * 乘法
             * @param arg1
             * @param arg2
             * @returns {Number}
             */
            function accMul(arg1, arg2) {
                var m = 0,
                    s1 = arg1.toString(),
                    s2 = arg2.toString();
                try {
                    m += s1.split(".")[1].length
                } catch(e) {}
                try {
                    m += s2.split(".")[1].length
                } catch(e) {}
                return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
            }
            /**
             * 除法
             * @param arg1
             * @param arg2
             * @returns {Number}
             */
            function accDiv(arg1, arg2) {
                var t1 = 0,
                    t2 = 0,
                    r1, r2;
                try {
                    t1 = arg1.toString().split(".")[1].length
                } catch(e) {}
                try {
                    t2 = arg2.toString().split(".")[1].length
                } catch(e) {}
                with(Math) {
                    r1 = Number(arg1.toString().replace(".", ""))
                    r2 = Number(arg2.toString().replace(".", ""))
                    return(r1 / r2) * pow(10, t2 - t1);
                }
            }
            /**
             * 加法
             * @param arg1
             * @param arg2
             * @returns {Number}
             */
            function accAdd(arg1, arg2) {
                var r1, r2, m, c;
                try {
                    r1 = arg1.toString().split(".")[1].length
                } catch(e) {
                    r1 = 0
                }
                try {
                    r2 = arg2.toString().split(".")[1].length
                } catch(e) {
                    r2 = 0
                }
                c = Math.abs(r1 - r2);
                m = Math.pow(10, Math.max(r1, r2))
                if(c > 0) {
                    var cm = Math.pow(10, c);
                    if(r1 > r2) {
                        arg1 = Number(arg1.toString().replace(".", ""));
                        arg2 = Number(arg2.toString().replace(".", "")) * cm;
                    } else {
                        arg1 = Number(arg1.toString().replace(".", "")) * cm;
                        arg2 = Number(arg2.toString().replace(".", ""));
                    }
                } else {
                    arg1 = Number(arg1.toString().replace(".", ""));
                    arg2 = Number(arg2.toString().replace(".", ""));
                }
                return(arg1 + arg2) / m
            }
            /**
             * 减法
             * @param arg1
             * @param arg2
             * @returns
             */
            function accSub(arg1, arg2) {
                var r1, r2, m, n;
                try {
                    r1 = arg1.toString().split(".")[1].length
                } catch(e) {
                    r1 = 0
                }
                try {
                    r2 = arg2.toString().split(".")[1].length
                } catch(e) {
                    r2 = 0
                }
                m = Math.pow(10, Math.max(r1, r2));
                //last modify by deeka
                //动态控制精度长度
                n = (r1 >= r2) ? r1 : r2;
                return((arg1 * m - arg2 * m) / m).toFixed(n);
            }

            console.log(accMul(7.88, 0.8) + '--7.88*0.8------乘法'); //乘法
            console.log(accDiv(7.88, 0.8) + '--7.88/0.8------除法'); //除法
            console.log(accAdd(7.88, 0.8) + '--7.88+0.8------加法'); //加法
            console.log(accSub(7.88, 0.8) + '--7.88-0.8------减法'); //减法
        </script>
    </body>

</html>

复制代码封装起来 引入直接调用

原文地址:https://www.cnblogs.com/lipengze/p/11428708.html