TEL:150-0382-3679
新闻资讯 News Center
建站知识 / 公司动态
float js 浮点类型相加减

   //加法函数,用来得到精确的加法结果

        //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。

        //调用:accAdd(arg1,arg2)

        // 返回值:arg1加上arg2的精确结果

        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

        }

        //给Number类型增加一个add方法,调用起来更加方便。

        Number.prototype.add = function (arg) {

            return accAdd(arg, this);

        }

        //减法函数,用来得到精确的减法结果

        //说明:javascript的减法结果会有误差,在两个浮点数相减的时候会比较明显。这个函数返回较为精确的减法结果。

        //调用:accSub(arg1,arg2)

        // 返回值:arg1加上arg2的精确结果

        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);
        }

一站式全网营销,您身边的网络营销顾问,为您一对一私人定制符合您实际需求的网络营销实施方案!
24小时咨询热线:
150-0382-3679