js中浮点型数据的计算

   js中计算浮点型有时候会出现精度丢失的bug,我第一次碰到的时候还很奇怪,后来百度说是js的bug,一般自己封装方法如下:

              

               var num1 = 6.8

                var num2 = 0.9

                console.log("方法调用:"+util.jsFloatAdd(num1,num2)) 

                console.log("方法调用:"+util.jsFloatSub(num1,num2)) 

                console.log("方法调用:"+util.jsFloatMul(num1,num2)) 

                console.log("方法调用:"+util.jsFloatDiv(num1,num2)) 

                console.log(6.8+0.9);

                console.log(6.8-0.9);

                console.log(6.8*0.9);

                console.log(6.8/0.9);

//js浮点数的计算

        //加

        util.jsFloatAdd = function (arg1, arg2) {

            var r1, r2, m;

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

            return (util.jsFloatMul(arg1, m) + util.jsFloatMul(arg2, m)) / m;

        },

        //减

        util.jsFloatSub = function (arg1, arg2) {

            return util.jsFloatAdd(arg1, -arg2);

        },

        //乘

        util.jsFloatMul = function (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);

        },

        //除

        util.jsFloatDiv = function (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);

            }

        },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值