首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>Javascript教程>资讯:js中的小数计算学问大-》注意误差

js中的小数计算学问大-》注意误差

www.jz123.cn  2010-09-27   来源:   中国建站    责任编辑(袁袁)    我要投递新闻

  在js中,带小数的数据相加或相乘时总会出现好多位小数。例如100.11+100.02=200.130000001类似的情况。这是因为在js中浮点数的计算是以2进制算的,解决方法一般是将小数化成整数后再作除法。如上例中:(100.01*100+100.02*100)/100 。

  以下是可用的JS小数计算函数和例子:

<form name="inputform">
<input type="text" name="a1">
<input type="text" name="a2">
<input type="button" value="累加" onclick="add()">
</form>
<script>
function add()
{
   var num1=parseFloat(document.getElementsByName("a1")[0].value);
   var num2=parseFloat(document.getElementsByName("a2")[0].value);
   document.getElementsByName("a1")[0].value=yunshuan(num1,"*",num2);
}
function   yunshuan(a,how,b){//正确浮点运算  
                  if(a.toString().indexOf(".")   <   0   &&   b.toString().indexOf(".")   <   0){//没小数  
                        return   eval(a   +   how   +   b);  
                  }  
                  //至少一个有小数  
                  var   alen   =   a.toString().split(".");  
                  if(alen.length   ==   1){//没有小数  
                      alen   =   0;  
                  }else   {  
                          alen   =   alen[1].length;  
                    }  
                  var   blen   =   b.toString().split(".");  
                  if(blen.length   ==   1){  
                      blen   =   0;  
                  }else   {  
                          blen   =   blen[1].length;  
                    }  
                  if(blen   >   alen)alen   =   blen;  
                  blen   =   "1";
                  for(;alen   >   0;   alen--){//创建一个相应的倍数  
                              blen   =   blen   +   "0";
                  }
                  switch(how){  
                        case   "+":  
                                      return   (a   *   blen   +   b   *   blen)   /   blen;  
                                break;  
                        case   "-":  
                                      return   (a   *   blen   -   b   *   blen)   /   blen;  
                                break;  
                        case   "*":  
                                      return   ((a   *   blen)   *   (b   *   blen))   /   (blen   *   blen);  
                                break;  
                        default:  
                                alert("你要求的\t"   +   how   +   "\t运算未完成!");  
                                return   eval(a   +   how   +   b);  
                  }  
}  

</script>



上一篇:JS获取元素相对于文档的坐标 下一篇:javascript阻止事件冒泡和浏览器的默认行为

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图