代码:
<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]);
},
}