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 相关文章推荐
xtree.js 代码
Mar 13 Javascript
中国地区三级联动下拉菜单效果分析
Nov 15 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
Feb 25 Javascript
jQuery中:has选择器用法实例
Dec 30 Javascript
vue之nextTick全面解析
May 17 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
微信小程序按钮去除边框线分享页面功能
Aug 27 Javascript
详解webpack2异步加载套路
Sep 14 Javascript
分享5个好用的javascript文件上传插件
Sep 16 Javascript
jQuery分组选择器简单用法示例
Apr 04 jQuery
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
Vue路由切换页面不更新问题解决方案
Jul 10 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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
2010/07/09 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
node.js 基于 STMP 协议和 EWS 协议发送邮件
2021/02/14 Javascript
Python实现的多进程和多线程功能示例
2018/05/29 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python os.fork() 循环输出方法
2019/08/08 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
应届硕士毕业生自荐信
2014/05/26 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
借条如何写
2015/05/26 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
创业计划书之酒厂
2019/10/14 职场文书