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 处理网页内容的实现代码
Feb 15 Javascript
JavaScript 学习笔记二 字符串拼接
Mar 28 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
javascript控制swfObject应用介绍
Nov 29 Javascript
javascript省市级联功能实现方法实例详解
Oct 20 Javascript
详解Node.js如何开发命令行工具
Aug 14 Javascript
PHP捕捉异常中断的方法
Oct 24 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
详解Angular调试技巧之报错404(not found)
Jan 31 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 Javascript
JS函数参数的传递与同名参数实例分析
Mar 16 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的简单采集数据入库程序【续篇】
2014/07/30 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
详解Python中的日志模块logging
2015/06/19 Python
Python while 循环使用的简单实例
2016/06/08 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
python实现海螺图片的方法示例
2019/05/12 Python
python里运用私有属性和方法总结
2019/07/08 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
python实现简单图书管理系统
2019/11/22 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
如何写python的配置文件
2020/06/07 Python
竞选班长自荐书范文
2014/03/09 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
追悼会答谢词
2015/01/05 职场文书
计划生育工作总结2015
2015/04/03 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android