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 常用操作方法
Jan 28 Javascript
基于JQuery制作的产品广告效果
Dec 08 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
JS图片根据鼠标滚动延时加载的实例代码
Jul 13 Javascript
基于javascript编写简单日历
May 02 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
Jan 13 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
Jul 03 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
Jan 09 Javascript
详解Vue 全局引入bass.scss 处理方案
Mar 26 Javascript
vue的token刷新处理的方法
Jul 17 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
Oct 21 Javascript
vue打开其他项目页面并传入数据详解
Nov 25 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.ini中文版(2)
2006/10/09 PHP
利用js调用后台php进行数据处理原码
2006/10/09 PHP
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
前端性能优化建议
2020/09/17 Javascript
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
Django和Flask框架优缺点对比
2019/10/24 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
python实现简单坦克大战
2020/03/27 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
夜班门卫岗位职责
2013/12/09 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
单位租房协议书范本
2014/12/04 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis
Golang map映射的用法
2022/04/22 Golang