javascript小数精度丢失的完美解决方法


Posted in Javascript onMay 31, 2016

原因: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小数精度丢失的完美解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jquery异步传输json数据格式实例代码
Nov 23 Javascript
js控制table合并具体实现
Feb 20 Javascript
把Node.js程序加入服务实现随机启动
Jun 25 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
Jun 23 Javascript
简单的JS轮播图代码
Jul 18 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
Sep 05 Javascript
Select2.js下拉框使用小结
Oct 24 Javascript
关于Bootstrap按钮组件消除黄框的方法
May 19 Javascript
面包屑导航详解
Dec 07 Javascript
Webpack的dll功能使用
Jun 28 Javascript
微信小程序实现图片滚动效果示例
Dec 05 Javascript
通过GASP让vue实现动态效果实例代码详解
Nov 24 Javascript
javascript解决小数的加减乘除精度丢失的方案
May 31 #Javascript
javascript基本语法
May 31 #Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
May 31 #Javascript
通用无限极下拉菜单的实现代码
May 31 #Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
May 30 #Javascript
详解JavaScript中双等号引起的隐性类型转换
May 30 #Javascript
JavaScript中的操作符类型转换示例总结
May 30 #Javascript
You might like
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Django返回json数据用法示例
2016/09/18 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
keras导入weights方式
2020/06/12 Python
Python如何实现线程间通信
2020/07/30 Python
Shein英国:女性时尚网上商店
2019/04/10 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
大学教师年终总结的自我评价
2013/10/29 职场文书
期末学生评语大全
2014/04/24 职场文书
秋天的图画教学反思
2014/05/01 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
消防安全承诺书
2014/05/22 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
昆虫记读书笔记
2015/06/26 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书
教师教育心得体会
2016/01/19 职场文书
用Python实现屏幕截图详解
2022/01/22 Python
PyTorch device与cuda.device用法
2022/04/03 Python