【JavaScript】js中的小数计算学问大-》注意误差
2010-09-26 18:04
288 查看
在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小数计算函数和例子:
<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 小数计算误差
- double float 类型的数据(小数)在作计算的时候,需要注意的。(Java和JavaScript)都有这问题
- js计算出现多位小数-Javascript 浮点运算问题分析与解决
- js 小数计算误差
- js 小数计算误差
- JavaScript js 精确、保留小数方法
- JS数字计算精度误差解决方法
- D3.js以及通用JS(JavaScript)读取并解析server端JSON的注意事项
- JavaScript计算两个文本框内数据的乘积(四舍五入保留两位小数)
- js-小数计算问题
- 用JS做计算的时候小数位不正常--Js中parseFloat()方法所产生的精度问题
- js 获取计算后的样式写法及注意事项
- javascript在计算浮点数(小数)不准确,解决方案
- javascript中JS文件的引用需要注意几点
- js小数计算小数点后显示多位小数(转)
- js 保留两位小数 多位小数(javascript)
- JavaScript使用math.js进行精确计算操作示例
- js计算误差修正代码(真实版)
- Javascript中小数精确计算问题
- javascript(js)小数精度丢失的解决方案