• 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>

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

  • 相关阅读:
    整数反转
    最长公共前缀
    罗马数字转整数
    单点登录
    VMware Workstation虚拟机密钥
    Pytest 用例内部执行顺序
    判断是不是回文数
    python端口IP字符串是否合法
    python求二叉树深度
    有两个字符串类型的数字,实现一个方法将它们进行相加,并返回相加后的数值。
  • 原文地址:https://www.cnblogs.com/lipengze/p/11428708.html
Copyright © 2020-2023  润新知