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 cdn使用介绍
May 08 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
Jan 10 Javascript
JavaScript中的fontsize()方法使用详解
Jun 08 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
Jan 29 Javascript
酷炫jQuery全屏3D焦点图动画效果
Mar 22 Javascript
使用angular帮你实现拖拽的示例
Jul 05 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
Jul 13 Javascript
JS实现百度搜索框关键字推荐
Feb 17 Javascript
JavaScript实现留言板案例
Mar 17 Javascript
原生js实现弹窗消息动画
Nov 20 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
Feb 07 Javascript
JavaScript实现两个数组的交集
Mar 25 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
重置版战役片段
2020/04/09 魔兽争霸
使用 php4 加速 web 传输
2006/10/09 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
2018/05/12 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
js跑马灯代码(自写)
2013/04/17 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
2013/10/24 Javascript
js select option对象小结
2013/12/20 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python提取页面内url列表的方法
2015/05/25 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
解决Django中多条件查询的问题
2019/07/18 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
python为什么要安装到c盘
2020/07/20 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
市场营销专业个人求职信范文
2013/12/14 职场文书
《我的信念》教学反思
2014/02/15 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
变长双向rnn的正确使用姿势教学
2021/05/31 Python
python中if和elif的区别介绍
2021/11/07 Python