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 相关文章推荐
escape、encodeURI、encodeURIComponent等方法的区别比较
Dec 27 Javascript
Jquery中获取iframe的代码
Jan 11 Javascript
DOM基础教程之使用DOM + Css
Jan 20 Javascript
script标签属性用type还是language
Jan 21 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
使用Script元素发送JSONP请求的方法
Jun 12 Javascript
Javascript获取background属性中url的值
Oct 17 Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 Javascript
vue使用iframe嵌入网页的示例代码
Jun 09 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
Jul 13 Javascript
深入理解Vue router的部分高级用法
Aug 15 Javascript
Vue中的循环及修改差值表达式的方法
Aug 29 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 getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
JS画线(实例代码)
2013/11/20 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
Web技术实现移动监测的介绍
2017/09/18 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
django中瀑布流写法实例代码
2019/10/14 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
python单例设计模式实现解析
2020/01/07 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
澳大利亚家具商店:Freedom
2020/12/17 全球购物
盛大笔试题
2016/11/05 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
学校办公室主任职责
2013/12/27 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
捐款倡议书
2014/04/14 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
2014年居委会工作总结
2014/12/09 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
自信主题班会
2015/08/14 职场文书
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers