javascript float运算的问题;运算结果多出0000000002

来源:互联网 发布:linux系统自带rpm在哪 编辑:程序博客网 时间:2024/04/29 13:31


半条虫466814195 javascript float 错误

代码:

<script>
        var flt1 = 1.0;
var flt2 = 1.2;
document.write('<div>');
for (var i = 10; i >= 0; i--) {
        flt1 +=0.1;
        document.write('var a='+flt1+'<br />var b='+flt2+'<br />a+b='+(flt1
                +flt2+'<br />'));
};
document.write('</div>');

结果:
</script>var a=1.1
var b=1.2
a+b=2.3
var a=1.2000000000000002
var b=1.2
a+b=2.4000000000000004
var a=1.3000000000000003
var b=1.2
a+b=2.5
var a=1.4000000000000004
var b=1.2
a+b=2.6000000000000005
var a=1.5000000000000004
var b=1.2
a+b=2.7
var a=1.6000000000000005
var b=1.2
a+b=2.8000000000000007
var a=1.7000000000000006
var b=1.2
a+b=2.9000000000000004
var a=1.8000000000000007
var b=1.2
a+b=3.000000000000001
var a=1.9000000000000008
var b=1.2
a+b=3.1000000000000005
var a=2.000000000000001
var b=1.2
a+b=3.200000000000001
var a=2.100000000000001
var b=1.2
a+b=3.3000000000000007



查了很多相关资料说是给加一个toFixed(2)可以解决


但还是不是很理想,锁性就自己写了个函数


{

floatSplit:function(f1){
                        var f=[0,0];
                        if (/([0-9]*)\.([0-9]*)/.test(f1)){
                                f[0] = parseInt(f1.toString().replace(/([0-9]*)\.([0-9]*)/,'$1'));
                                f[1] = f1.toString().replace(/([0-9]*)\.([0-9]*)/,'$2');
                        }else{
                                f[0]=f1;
                        }
                        return f;
        },
        floatAdd:function(f1,f2){
                        var zf1=this.floatSplit(f1);
                        var zf2=this.floatSplit(f2);
                        var zf=[0,0];
                                zf[0]=zf1[0]+zf2[0];
                        var ilen = zf1[1].toString().length-zf2[1].toString().length;
                        var zoo =1;
                        var iw =0;
                        if (ilen>0){
                                iw = zf1[1].toString().length;
                                while (ilen--)
                                        zoo*=10;
                                zf2[1]=parseInt(zf2[1])*zoo;
                        }else{
                                iw = zf2[1].toString().length;
                                while (ilen++)
                                        zoo*=10;
                                zf1[1]=parseInt(zf1[1])*zoo;
                        }
                        zf[1]=parseInt(zf1[1])+parseInt(zf2[1]);
                        ilen = zf[1].toString().length-iw;
                        if(ilen>0){
                                zf[0]+= parseInt(zf[1].toString().substr(0,ilen));
                                zf[1] = zf[1].toString().substr(ilen);
                        }
                        return new Number(zf[0]+'.'+zf[1]);

        },

}

0 0
原创粉丝点击