JavaScript不支持精确的浮点数运算的解决方案

本文探讨了JavaScript中浮点数运算出现不精确的问题,并提供了两种解决方案:一是通过转换为整数后再进行运算的方法;二是利用自定义函数实现精确的小数乘法运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript不支持精确的浮点数运算的解决方案
问:
请看以下代码:(JavaScript,IE6.0)
var i = 5.1; //6.1,7.1也可
var j = 0.1;
var s = i + j;

经以上运算,S 的值为5.19999999999999;而不是5.2;
但若 i 取值为8.1,则 S 的值正常,为8.2;我另取了一些不同的浮点数进行相加,
最终结果有的正常,有的则不正常。看不出有什么规律性。
请问这究竟是JavaScript不支持精确的浮点数运算,还是进行浮点数运算需做什么特殊措施?
请各位知因者不吝指教。多谢!
EMAIL:cms2037@yahoo.com.cn
______________________________________________________________________________________________
答1:
你必须先转换成整数再进运算
______________________________________________________________________________________________
答2:
<script>
alert(qswhAdd(5.1,0.1))
function qswhAdd(n1,n2){
var r1,r2,m;
try{r1=n1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=n2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
return (n1*m+n2*m)/m
}
</script>
===============================================================================

 2005年3月23日
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>

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值