首页 > Web开发 > 详细

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

时间:2019-08-29 12:25:49      阅读:96      评论:0      收藏:0      [点我收藏+]
<!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>

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

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

原文:https://www.cnblogs.com/1212dsa/p/11428708.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!