js精确的加减乘除实例


Posted in Javascript onNovember 14, 2017

实例如下:

(function () {
 var calc = {
  /*
  函数,加法函数,用来得到精确的加法结果 
  说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
  参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
  调用:Calc.Add(arg1,arg2,d) 
  返回值:两数相加的结果
  */
  Add: function (arg1, arg2) {
   arg1 = arg1.toString(), arg2 = arg2.toString();
   var arg1Arr = arg1.split("."), arg2Arr = arg2.split("."), d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", d2 = arg2Arr.length == 2 ? arg2Arr[1] : "";
   var maxLen = Math.max(d1.length, d2.length);
   var m = Math.pow(10, maxLen);
   var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
   var d = arguments[2];
   return typeof d === "number" ? Number((result).toFixed(d)) : result;
  },
  /*
  函数:减法函数,用来得到精确的减法结果 
  说明:函数返回较为精确的减法结果。 
  参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数
  调用:Calc.Sub(arg1,arg2) 
  返回值:两数相减的结果
  */
  Sub: function (arg1, arg2) {
   return Calc.Add(arg1, -Number(arg2), arguments[2]);
  },
  /*
  函数:乘法函数,用来得到精确的乘法结果 
  说明:函数返回较为精确的乘法结果。 
  参数:arg1:第一个乘数;arg2第二个乘数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
  调用:Calc.Mul(arg1,arg2) 
  返回值:两数相乘的结果
  */
  Mul: function (arg1, arg2) {
   var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
   m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0);
   resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m);
   return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
  },
  /*
  函数:除法函数,用来得到精确的除法结果 
  说明:函数返回较为精确的除法结果。 
  参数:arg1:除数;arg2被除数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
  调用:Calc.Div(arg1,arg2) 
  返回值:arg1除于arg2的结果
  */
  Div: function (arg1, arg2) {
   var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
   m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0);
   resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m);
   return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
  }
 };
 window.Calc = calc;
}());

我已经测试过了 可以直接使用!

以上这篇js精确的加减乘除实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 1.4 中的Ajax问题
Jan 23 Javascript
javascript encodeURI和encodeURIComponent的比较
Apr 03 Javascript
jQuery父级以及同级元素查找介绍
Sep 04 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
Jul 21 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
Sep 17 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
Oct 05 Javascript
利用JQuery阻止事件冒泡
Dec 01 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
Vue的Class与Style绑定的方法
Sep 01 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
Aug 07 Javascript
基于vue.js实现购物车
Jan 15 Javascript
JavaScript插件Tab选项卡效果
Nov 14 #Javascript
vue中如何创建多个ueditor实例教程
Nov 14 #Javascript
基于 Vue 实现一个酷炫的 menu插件
Nov 14 #Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 #Javascript
Angular移动端页面input无法输入的解决方法
Nov 14 #Javascript
使用Vue-Router 2实现路由功能实例详解
Nov 14 #Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 #Javascript
You might like
php 静态页面中显示动态内容
2009/08/14 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
图解javascript作用域链
2019/05/27 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
TensorFlow实现自定义Op方式
2020/02/04 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
纽约手袋品牌:KARA
2018/03/18 全球购物
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
人力资源管理专业学生自我评价
2013/11/20 职场文书
党章学习思想汇报
2014/01/14 职场文书
电力安全事故反思
2014/04/27 职场文书
幼儿发展评估方案
2014/06/11 职场文书
植树节口号
2014/06/21 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
三八妇女节主持词
2015/07/04 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书