明志唯新

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

发表于

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

alert(11*22.9)

结果是 251.89999999999998 而不是 251.9

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

alert(11*(22.9*10)/10);

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

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

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