javascript小数精度丢失的完美解决方法
来源: 阅读:1533 次 日期:2016-06-17 16:13:31
温馨提示: 小编为您整理了“javascript小数精度丢失的完美解决方法”,方便广大网友查阅!

下面小编就为大家带来一篇javascript小数精度丢失的完美解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。

原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况.

javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999等,下面列出可以完美求出相应精度的四种js算法

代码如下:

function accDiv(arg1,arg2){  

 var t1=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(".","")) 

 return accMul((r1/r2),pow(10,t2-t1));  

 }  

 }  /* 何问起 hovertree.com */

 //乘法 

 function accMul(arg1,arg2)  

 {  

 var m=0,s1=arg1.toString(),s2=arg2.toString();  

 try{m+=s1.split(".")[1].length}catch(e){}  

 try{m+=s2.split(".")[1].length}catch(e){}  

 return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)  

 }  

//加法  

function accAdd(arg1,arg2){  

var r1,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))  

return (arg1*m+arg2*m)/m  

}  

//减法  

function Subtr(arg1,arg2){ 

  var r1,r2,m,n; 

  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)); 

  n=(r1>=r2)?r1:r2; 

  return ((arg1*m-arg2*m)/m).toFixed(n); 

}

以上这篇javascript小数精度丢失的完美解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map