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

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

 

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

结果是251.89999999999998 而不是251.9,再试试: 

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

好了,得到正确答案251.9。现在解决问题的大概思路就是,先把因数放大为整数,最后再除以相应的倍数,这样就能得到正确的结果了。代码如下: 

<script defer>
Number.prototype.rate=function(){ //给数字对象添加自定义的rate方法
var oStr=this.toString() //将数字转成字符串
if(oStr.indexOf(".")==-1) //查找小数点,确定因数是否是小数
return 1 file://不是小数时返回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(11*22.9+"\n"+tran(11,22.9)) //两种结果相比较
</script>

版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2008-01/i154.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>