【JavaScript】js中的小数计算学问大-》注意误差
时间:2010-09-26 来源:Peter Jin
以下是可用的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>