zoukankan      html  css  js  c++  java
  • 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>

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

  • 相关阅读:
    1254:走出迷宫
    1332:【例2-1】周末舞会
    P1744 采购特价商品 题解(讲解图论)
    p1305 新二叉树
    P1069 细胞分裂
    LOJ #124. 除数函数求和 1
    P4438 [HNOI/AHOI2018]道路
    P4318 完全平方数
    P1447 [NOI2010]能量采集
    P3200 [HNOI2009]有趣的数列
  • 原文地址:https://www.cnblogs.com/lipengze/p/11428708.html
Copyright © 2011-2022 走看看