浮点运算:javascript 中浮点型数字的运算精度



javascript种浮点型数字运算时精度会丢失下面思路方法可以解决精度丢失问题

//除法用来得到精确除法结果
//介绍说明:javascript除法结果会有误差在两个浮点数相除时候会比较明显这个返回较为精确除法结果
//:accDiv(arg1,arg2)
//返回值:arg1除以arg2精确结果
functionaccDiv(arg1,arg2){
vart1=0,t2=0,r1,r2;
try{t1=arg1.toString.split(\".\")[1].length}catch(e){}
try{t2=arg2.toString.split(\".\")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString.replace(\".\",\"\"))
r2=Number(arg2.toString.replace(\".\",\"\"))
(r1/r2)*pow(10,t2-t1);
}
}

//给Number类型增加个div思路方法起来更加方便
Number.prototype.div=function(arg){
accDiv(this,arg);
}

//乘法用来得到精确乘法结果
//介绍说明:javascript乘法结果会有误差在两个浮点数相乘时候会比较明显这个返回较为精确乘法结果
//:accMul(arg1,arg2)
//返回值:arg1乘以arg2精确结果
functionaccMul(arg1,arg2)
{
varm=0,s1=arg1.toString,s2=arg2.toString;
try{ms1.split(\".\")[1].length}catch(e){}
try{ms2.split(\".\")[1].length}catch(e){}
Number(s1.replace(\".\",\"\"))*Number(s2.replace(\".\",\"\"))/Math.pow(10,m)
}

//给Number类型增加个mul思路方法起来更加方便
Number.prototype.mul=function(arg){
accMul(arg,this);
}

//加法用来得到精确加法结果
//介绍说明:javascript加法结果会有误差在两个浮点数相加时候会比较明显这个返回较为精确加法结果
//:accAdd(arg1,arg2)
//返回值:arg1加上arg2精确结果
functionaccAdd(arg1,arg2){
varr1,r2,m;
try{r1=arg1.toString.split(\".\")[1].length}catch(e){r1=0}
try{r2=arg2.toString.split(\".\")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
(arg1*m+arg2*m)/m
}

//给Number类型增加个add思路方法起来更加方便
Number.prototype.add=function(arg){
accAdd(arg,this);
}

<script>
//除法用来得到精确除法结果
//介绍说明:javascript除法结果会有误差在两个浮点数相除时候会比较明显这个返回较为精确除法结果
//:accDiv(arg1,arg2)
//返回值:arg1除以arg2精确结果
functionaccDiv(arg1,arg2){
vart1=0,t2=0,r1,r2;
try{t1=arg1.toString.split(\".\")[1].length}catch(e){}
try{t2=arg2.toString.split(\".\")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString.replace(\".\",\"\"))
r2=Number(arg2.toString.replace(\".\",\"\"))
(r1/r2)*pow(10,t2-t1);
}
}

//给Number类型增加个div思路方法起来更加方便
Number.prototype.div=function(arg){
accDiv(this,arg);
}

//乘法用来得到精确乘法结果
//介绍说明:javascript乘法结果会有误差在两个浮点数相乘时候会比较明显这个返回较为精确乘法结果
//:accMul(arg1,arg2)
//返回值:arg1乘以arg2精确结果
functionaccMul(arg1,arg2)
{
varm=0,s1=arg1.toString,s2=arg2.toString;
try{ms1.split(\".\")[1].length}catch(e){}
try{ms2.split(\".\")[1].length}catch(e){}
Number(s1.replace(\".\",\"\"))*Number(s2.replace(\".\",\"\"))/Math.pow(10,m) [Page]
}

//给Number类型增加个mul思路方法起来更加方便
Number.prototype.mul=function(arg){
accMul(arg,this);
}

//加法用来得到精确加法结果
//介绍说明:javascript加法结果会有误差在两个浮点数相加时候会比较明显这个返回较为精确加法结果
//:accAdd(arg1,arg2)
//返回值:arg1加上arg2精确结果
functionaccAdd(arg1,arg2){
varr1,r2,m;
try{r1=arg1.toString.split(\".\")[1].length}catch(e){r1=0}
try{r2=arg2.toString.split(\".\")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
(arg1*m+arg2*m)/m
}

//给Number类型增加个add思路方法起来更加方便
Number.prototype.add=function(arg){
accAdd(arg,this);
}

  document.writeln(\"未改进运算:7*0.8=\"+7*0.8+\"\\<br>\");
  document.writeln(\"改进以后运算:7*0.8=\"+(7).mul(0.8)+\"\\<br>\");
  //你可以修改代码进行其它运算测试
</script>

Tags:  amd浮点运算 浮点运算能力 什么是浮点运算 浮点运算

延伸阅读

最新评论

发表评论