在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>