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 相关文章推荐
JavaScript的parseInt 进制问题
May 07 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
Mar 01 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
Aug 29 Javascript
bootstrap基础知识学习笔记
Nov 02 Javascript
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
使用nvm管理不同版本的node与npm的方法
Oct 31 Javascript
用Node提供静态文件服务的方法
Jul 06 Javascript
微信小程序实现单选功能
Oct 30 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
Jul 19 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
JS实现百度搜索框关键字推荐
Feb 17 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三维数组去重(示例代码)
2013/11/26 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
Web开发之JavaScript
2012/03/29 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
js获取ip和地区
2017/03/10 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
js常见遍历操作小结
2019/06/06 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
python实现装饰器、描述符
2018/02/28 Python
Python 找到列表中满足某些条件的元素方法
2018/06/26 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
库房管理员岗位职责
2014/03/09 职场文书
学生评语大全
2014/04/18 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
2015年企业新年寄语
2014/12/08 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
2015年个人思想总结
2015/03/09 职场文书
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技