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 相关文章推荐
用JavaScript修改CSS属性的代码
May 06 Javascript
javascript屏蔽右键代码
May 15 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
JavaScript使用Range调色及透明度实例
Sep 25 Javascript
纯js的右下角弹窗实例
Mar 12 Javascript
template.js前端模板引擎使用详解
Oct 10 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
Feb 13 jQuery
JS实现select选中option触发事件操作示例
Jul 13 Javascript
JS中call()和apply()的功能及用法实例分析
Jun 28 Javascript
原生JS实现九宫格抽奖
Sep 13 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
构建简单的Webmail系统
2006/10/09 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
常用的js方法合集
2017/03/10 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python中的urllib模块使用详解
2015/07/07 Python
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
如何基于Python按行合并两个txt
2020/11/03 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
web页面录屏实现
2019/02/12 HTML / CSS
生日宴会答谢词
2014/01/09 职场文书
迎元旦广播稿
2014/02/22 职场文书
与死神共舞观后感
2015/06/15 职场文书
单位更名证明
2015/06/18 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
Python操作CSV格式文件的方法大全
2021/07/15 Python
Docker部署Mysql8的实现步骤
2022/07/07 Servers