Js修复四则运算浮点数精度问题

var preMath = function () {
    return {
        //修复四则运算浮点数精度问题
        fixArithmetic: function (m, n, op) {
            var a = (m + "");
            var b = (n + "");
            var x = 1;
            var y = 1;
            var c = 1;
            if (a.indexOf(".") > 0) {
                x = Math.pow(10, a.length - a.indexOf(".") - 1);
            }
            if (b.indexOf(".") > 0) {
                y = Math.pow(10, b.length - b.indexOf(".") - 1);
            }
            switch (op) {
                case '+':
                    c = Math.max(x, y);
                    m = Math.round(m * c);
                    n = Math.round(n * c);
                    return eval("(" + m + op + n + ")/" + c);
                case '-':
                    c = Math.max(x, y);
                    m = Math.round(m * c);
                    n = Math.round(n * c);
                    n = -n;
                    op = "+";
                    return eval("(" + m + op + n + ")/" + c);
                case '*':
                    c = x * y;
                    m = Math.round(m * x);
                    n = Math.round(n * y);
                    return eval("(" + m + op + n + ")/" + c);
                case '/':
                    c = Math.max(x, y);
                    m = Math.round(m * c);
                    n = Math.round(n * c);
                    c = 1;
                    return eval("(" + m + op + n + ")/" + c);
            }
        }
    };
}();

 

posted @ 2017-03-31 11:04  发福大叔  阅读(296)  评论(0编辑  收藏  举报