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阻止事件冒泡和浏览器的默认行为