关于JS中乘法的浮点错误解决方法

衣明志 发表于 , 阅读 (14861)

JS里做小数的乘法运算时会出现浮点错误,具体可以测试一下:

<script> 
    alert(11*22.9) 
</script> 

结果是251.89999999999998 而不是251.9

这个问题想必有很多人为之头痛。那么如何解决呢?在此给出解决办法。

  1. <script> alert(11*(22.9*10)/10); </script>

解决问题的大概思路就是,先把因数放大为整数,最后再除以相应的倍数,这样就能得到正确的结果了。

2.

<script defer> 
    Number.prototype.rate=function(){  
        var oStr=this.toString(); 
        if(oStr.indexOf(".")==-1)  
            return 1; 
        else 
            return Math.pow(10,parseInt(oStr.length-oStr.indexOf(".")-1)); 
    } 

    function tran(){ 
        args=tran.arguments; 
        var temp=1; 
        for(i=0;i<args.length;i++) 
            temp*=args[ i ]*args[ i ].rate(); 
        for(i=0;i<args.length;i++)  
            temp/=args[ i ].rate(); 
        return temp 
    } 

    alert(tran(11,22.9)); 

</script> 

该解决办法是比较麻烦的办法,但是却能让你大概了解解决这个问题的实际过程。

1 条评论
枫魔擎
枫魔擎 2005-11-23 05:19
您好,我也遇到了这个问题,但是你这个函数有问题,我用55&#215;65.1111的时候就出现了错误,反而不用这个函数,直接乘出来的结果是对的。