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 相关文章推荐
用js实现上传图片前的预览(TX的面试题)
Aug 14 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
高效的获取当前元素是父元素的第几个子元素
Oct 15 Javascript
window.open打开页面居中显示的示例代码
Dec 27 Javascript
Jquery实现Div上下移动示例
Apr 23 Javascript
JQuery中$(document)是什么意思有什么作用
Jul 21 Javascript
javascript常用函数(2)
Nov 05 Javascript
详解原生js实现offset方法
Jun 15 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
如何在wxml中直接写js代码(wxs)
Nov 14 Javascript
JavaScript监听触摸事件代码实例
Dec 30 Javascript
vue判断按钮是否可以点击
Apr 09 Vue.js
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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php strtotime 函数UNIX时间戳
2009/01/14 PHP
php Session存储到Redis的方法
2013/11/04 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
开源Web应用框架Django图文教程
2017/03/09 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
python对csv文件追加写入列的方法
2019/08/01 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
《落花生》教学反思
2014/02/25 职场文书
2014年工人工作总结
2014/11/25 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
发票退票证明
2015/06/24 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
MySQL七大JOIN的具体使用
2022/02/28 MySQL