js数字计算 误差问题的快速解决方法


Posted in Javascript onFebruary 28, 2017

实例如下:

//加法函数,用来得到精确的加法结果 

//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 

//调用:accAdd(arg1,arg2) 

//返回值:arg1加上arg2的精确结果 

function add(a,b){ 
	var c, d, e;
  try {
    c = a.toString().split(".")[1].length;
  } catch (f) {
    c = 0;
  }
  try {
    d = b.toString().split(".")[1].length;
  } catch (f) {
    d = 0;
  }
  return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e;

	} 
	//乘法函数,用来得到精确的乘法结果 
	//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 
	
	//调用:accMul(arg1,arg2) 
	
	//返回值:arg1乘以arg2的精确结果 
	
function mul(a, b) {
  var c = 0,
    d = a.toString(),
    e = b.toString();
  try {
    c += d.split(".")[1].length;
  } catch (f) {}
  try {
    c += e.split(".")[1].length;
  } catch (f) {}
  return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
	//减法函数,用来得到精确的减法结果 

	//说明:javascript的减法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。 

	//调用:accSubtr(arg1,arg2) 

	//返回值:arg1减去arg2的精确结果 

	function sub(a,b){
		var c, d, e;
	  try {
	    c = a.toString().split(".")[1].length;
	  } catch (f) {
	    c = 0;
	  }
	  try {
	    d = b.toString().split(".")[1].length;
	  } catch (f) {
	    d = 0;
	  }
	  return e = Math.pow(10, Math.max(c, d)), (mul(a, e) - mul(b, e)) / e;

	}
	//除法函数,用来得到精确的除法结果 

	//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。 

	//调用:accDiv(arg1,arg2) 

	//返回值:arg1除以arg2的精确结果 

	function div(a, b) {
	  var c, d, e = 0,
	    f = 0;
	  try {
	    e = a.toString().split(".")[1].length;
	  } catch (g) {}
	  try {
	    f = b.toString().split(".")[1].length;
	  } catch (g) {}
	  return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), mul(c / d, Math.pow(10, f - e));
}

以上这篇js数字计算 误差问题的快速解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery ajax 登录验证实现代码
Sep 23 Javascript
jquery三个关闭弹出层的小示例
Nov 05 Javascript
jQuery实现切换字体大小的方法
Mar 10 Javascript
多个jQuery版本共存的处理方案
Mar 17 Javascript
Node.js中文件操作模块File System的详细介绍
Jan 05 Javascript
vue2.0模拟锚点的实例
Mar 14 Javascript
vue中过滤器filter的讲解
Jan 21 Javascript
JavaScript显式数据类型转换详解
Mar 18 Javascript
JavaScript进阶(一)变量声明提升实例分析
May 09 Javascript
jQuery实现带进度条的轮播图
Sep 13 jQuery
JS相册图片抖动放大展示效果的示例代码
Jan 29 Javascript
js基础语法与maven项目配置教程案例
Jul 15 Javascript
js数字舍入误差以及解决方法(必看篇)
Feb 28 #Javascript
JS实现浏览器打印、打印预览示例
Feb 28 #Javascript
JS基于面向对象实现的多个倒计时器功能示例
Feb 28 #Javascript
js中删除数组中的某一元素实例(无下标时)
Feb 28 #Javascript
jQuery图片切换动画效果
Feb 28 #Javascript
jQuery 判断元素整理汇总
Feb 28 #Javascript
jQuery倒计时代码(超简单)
Feb 27 #Javascript
You might like
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
php+javascript的日历控件
2009/11/19 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
使用python存储网页上的图片实例
2018/05/22 Python
详解python分布式进程
2018/10/08 Python
Python绘制热力图示例
2019/09/27 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
Python中Yield的基本用法
2020/10/18 Python
植物选择:Botanic Choice
2017/02/15 全球购物
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
单位单身证明样本
2014/10/11 职场文书
个人学习总结范文
2015/02/15 职场文书
周一给客户的问候语
2015/11/10 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
React四级菜单的实现
2022/04/08 Javascript