javascript种浮点型数字运算时
![](/icons/54548dou.gif)
精度会丢失
![](/icons/54548dou.gif)
下面思路方法可以解决精度丢失问题
//除法
![](/icons/54548hanshu.gif)
![](/icons/54548dou.gif)
用来得到精确
![](/icons/54548de.gif)
除法结果
//介绍说明:javascript
![](/icons/54548de.gif)
除法结果会有误差
![](/icons/54548dou.gif)
在两个浮点数相除
![](/icons/54548de.gif)
时候会比较明显
![](/icons/54548dou2.gif)
这个
![](/icons/54548hanshu.gif)
返回较为精确
![](/icons/54548de.gif)
除法结果
//
![](/icons/54548diaoyong.gif)
:accDiv(arg1,arg2)
//返回值:arg1除以arg2
![](/icons/54548de.gif)
精确结果
functionaccDiv(arg1,arg2){
vart1=0,t2=0,r1,r2;
try{t1=arg1.toString
![](/icons/54548kh.gif)
.split(\".\")[1].length}catch(e){}
try{t2=arg2.toString
![](/icons/54548kh.gif)
.split(\".\")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString
![](/icons/54548kh.gif)
.replace(\".\",\"\"))
r2=Number(arg2.toString
![](/icons/54548kh.gif)
.replace(\".\",\"\"))
![](/icons/54548return.gif)
(r1/r2)*pow(10,t2-t1);
}
}
//给Number类型增加
![](/icons/54548yi.gif)
个div思路方法
![](/icons/54548dou.gif)
![](/icons/54548diaoyong.gif)
起来更加方便
Number.prototype.div=function(arg){
![](/icons/54548return.gif)
accDiv(this,arg);
}
//乘法
![](/icons/54548hanshu.gif)
![](/icons/54548dou.gif)
用来得到精确
![](/icons/54548de.gif)
乘法结果
//介绍说明:javascript
![](/icons/54548de.gif)
乘法结果会有误差
![](/icons/54548dou.gif)
在两个浮点数相乘
![](/icons/54548de.gif)
时候会比较明显
![](/icons/54548dou2.gif)
这个
![](/icons/54548hanshu.gif)
返回较为精确
![](/icons/54548de.gif)
乘法结果
//
![](/icons/54548diaoyong.gif)
:accMul(arg1,arg2)
//返回值:arg1乘以arg2
![](/icons/54548de.gif)
精确结果
functionaccMul(arg1,arg2)
{
varm=0,s1=arg1.toString
![](/icons/54548kh.gif)
,s2=arg2.toString
![](/icons/54548kh.gif)
;
try{m
![](/icons/54548jiadeng.gif)
s1.split(\".\")[1].length}catch(e){}
try{m
![](/icons/54548jiadeng.gif)
s2.split(\".\")[1].length}catch(e){}
![](/icons/54548return.gif)
Number(s1.replace(\".\",\"\"))*Number(s2.replace(\".\",\"\"))/Math.pow(10,m)
}
//给Number类型增加
![](/icons/54548yi.gif)
个mul思路方法
![](/icons/54548dou.gif)
![](/icons/54548diaoyong.gif)
起来更加方便
Number.prototype.mul=function(arg){
![](/icons/54548return.gif)
accMul(arg,this);
}
//加法
![](/icons/54548hanshu.gif)
![](/icons/54548dou.gif)
用来得到精确
![](/icons/54548de.gif)
加法结果
//介绍说明:javascript
![](/icons/54548de.gif)
加法结果会有误差
![](/icons/54548dou.gif)
在两个浮点数相加
![](/icons/54548de.gif)
时候会比较明显
![](/icons/54548dou2.gif)
这个
![](/icons/54548hanshu.gif)
返回较为精确
![](/icons/54548de.gif)
加法结果
//
![](/icons/54548diaoyong.gif)
:accAdd(arg1,arg2)
//返回值:arg1加上arg2
![](/icons/54548de.gif)
精确结果
functionaccAdd(arg1,arg2){
varr1,r2,m;
try{r1=arg1.toString
![](/icons/54548kh.gif)
.split(\".\")[1].length}catch(e){r1=0}
try{r2=arg2.toString
![](/icons/54548kh.gif)
.split(\".\")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
![](/icons/54548return.gif)
(arg1*m+arg2*m)/m
}
//给Number类型增加
![](/icons/54548yi.gif)
个add思路方法
![](/icons/54548dou.gif)
![](/icons/54548diaoyong.gif)
起来更加方便
Number.prototype.add=function(arg){
![](/icons/54548return.gif)
accAdd(arg,this);
}
<script>
//除法
![](/icons/54548hanshu.gif)
![](/icons/54548dou.gif)
用来得到精确
![](/icons/54548de.gif)
除法结果
//介绍说明:javascript
![](/icons/54548de.gif)
除法结果会有误差
![](/icons/54548dou.gif)
在两个浮点数相除
![](/icons/54548de.gif)
时候会比较明显
![](/icons/54548dou2.gif)
这个
![](/icons/54548hanshu.gif)
返回较为精确
![](/icons/54548de.gif)
除法结果
//
![](/icons/54548diaoyong.gif)
:accDiv(arg1,arg2)
//返回值:arg1除以arg2
![](/icons/54548de.gif)
精确结果
functionaccDiv(arg1,arg2){
vart1=0,t2=0,r1,r2;
try{t1=arg1.toString
![](/icons/54548kh.gif)
.split(\".\")[1].length}catch(e){}
try{t2=arg2.toString
![](/icons/54548kh.gif)
.split(\".\")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString
![](/icons/54548kh.gif)
.replace(\".\",\"\"))
r2=Number(arg2.toString
![](/icons/54548kh.gif)
.replace(\".\",\"\"))
![](/icons/54548return.gif)
(r1/r2)*pow(10,t2-t1);
}
}
//给Number类型增加
![](/icons/54548yi.gif)
个div思路方法
![](/icons/54548dou.gif)
![](/icons/54548diaoyong.gif)
起来更加方便
Number.prototype.div=function(arg){
![](/icons/54548return.gif)
accDiv(this,arg);
}
//乘法
![](/icons/54548hanshu.gif)
![](/icons/54548dou.gif)
用来得到精确
![](/icons/54548de.gif)
乘法结果
//介绍说明:javascript
![](/icons/54548de.gif)
乘法结果会有误差
![](/icons/54548dou.gif)
在两个浮点数相乘
![](/icons/54548de.gif)
时候会比较明显
![](/icons/54548dou2.gif)
这个
![](/icons/54548hanshu.gif)
返回较为精确
![](/icons/54548de.gif)
乘法结果
//
![](/icons/54548diaoyong.gif)
:accMul(arg1,arg2)
//返回值:arg1乘以arg2
![](/icons/54548de.gif)
精确结果
functionaccMul(arg1,arg2)
{
varm=0,s1=arg1.toString
![](/icons/54548kh.gif)
,s2=arg2.toString
![](/icons/54548kh.gif)
;
try{m
![](/icons/54548jiadeng.gif)
s1.split(\".\")[1].length}catch(e){}
try{m
![](/icons/54548jiadeng.gif)
s2.split(\".\")[1].length}catch(e){}
![](/icons/54548return.gif)
Number(s1.replace(\".\",\"\"))*Number(s2.replace(\".\",\"\"))/Math.pow(10,m) [Page]
}
//给Number类型增加
![](/icons/54548yi.gif)
个mul思路方法
![](/icons/54548dou.gif)
![](/icons/54548diaoyong.gif)
起来更加方便
Number.prototype.mul=function(arg){
![](/icons/54548return.gif)
accMul(arg,this);
}
//加法
![](/icons/54548hanshu.gif)
![](/icons/54548dou.gif)
用来得到精确
![](/icons/54548de.gif)
加法结果
//介绍说明:javascript
![](/icons/54548de.gif)
加法结果会有误差
![](/icons/54548dou.gif)
在两个浮点数相加
![](/icons/54548de.gif)
时候会比较明显
![](/icons/54548dou2.gif)
这个
![](/icons/54548hanshu.gif)
返回较为精确
![](/icons/54548de.gif)
加法结果
//
![](/icons/54548diaoyong.gif)
:accAdd(arg1,arg2)
//返回值:arg1加上arg2
![](/icons/54548de.gif)
精确结果
functionaccAdd(arg1,arg2){
varr1,r2,m;
try{r1=arg1.toString
![](/icons/54548kh.gif)
.split(\".\")[1].length}catch(e){r1=0}
try{r2=arg2.toString
![](/icons/54548kh.gif)
.split(\".\")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
![](/icons/54548return.gif)
(arg1*m+arg2*m)/m
}
//给Number类型增加
![](/icons/54548yi.gif)
个add思路方法
![](/icons/54548dou.gif)
![](/icons/54548diaoyong.gif)
起来更加方便
Number.prototype.add=function(arg){
![](/icons/54548return.gif)
accAdd(arg,this);
}
document.writeln(\"未改进
![](/icons/54548de.gif)
运算:7*0.8=\"+7*0.8+\"\\<br>\");
document.writeln(\"改进以后
![](/icons/54548de.gif)
运算:7*0.8=\"+(7).mul(0.8)+\"\\<br>\");
//你可以修改代码进行其它
![](/icons/54548de.gif)
运算测试
</script>
延伸阅读
最新评论