JS精确四则运算工具方法
来源:互联网 发布:51单片机蓝牙小车程序 编辑:程序博客网 时间:2024/05/29 07:18
编写了一个实现任意位数实现连续+、-、*、/单一运算的工具方法,欢迎大家使用还有发现bug和优化的地方一定一定在下方评论。
var calculationTools = { //工具变量 //每个数值的小数位数数组,用于取到小数位数的最大值 bitArr: [], //小数位数最大值,用于给每个数字取整 maxBit: 0, //取整后的数组,用于精确地四则运算 intArr: [], //Math.pow(10,maxBit)不需要解释了吧 roundingNum: 0, //传入参数的个数,用来在intArr四则运算放大倍数后还原正常值 parameterNum: 0, //四则运算调用名 //加法 add: function() { this.init.apply(this, arguments); return this.calculation("add"); }, //减法 sub: function() { this.init.apply(this, arguments); return this.calculation("sub"); }, //乘法 mul: function() { this.init.apply(this, arguments); return this.calculation("mul"); }, //除法 div: function() { this.init.apply(this, arguments); return this.calculation("div"); }, //下面是定义的工具方法,与四则运算函数的使用无关 //初始化,这里的初始化顺序要注意,一定要根据变量依赖情况按顺序初始化!!!花了我好长时间找bug!!! init: function() { this.bitArr = (this.getBitArr).apply(this, arguments); this.maxBit = (this.getMaxBit).apply(this, arguments); this.intArr = (this.getIntArr).apply(this, arguments); this.roundingNum = Math.pow(10, this.maxBit); this.parameterNum = arguments.length; }, //返回位数数组,依赖项:无。 getBitArr: function() { var bitArr = []; bitArr = [].map.call(arguments, function(item) { try { return item.split(".")[1].length; } catch(e) { return 0; } }); return bitArr; }, //返回最大位数,依赖项:bitArr。 getMaxBit: function() { return Math.max.apply(Math, this.bitArr); }, //返回取整数组,依赖项:maxBit。 getIntArr: function() { var intArr = []; var This = this; intArr = [].map.call(arguments, function(item) { //由于存在加减法,这里的取整没有采用str.replace(".","") //而是使用了乘上10的最大位数的次方再取整的方法 return parseInt(item * Math.pow(10, This.maxBit)); }); return intArr; }, //数组循环计算 calculation: function(flag) { //把数组第一个值赋给sum var sum = this.intArr[0]; //从数组第二项开始四则运算 for(var i = 1; i < this.parameterNum; i++) { if(flag === "add") { sum += this.intArr[i]; } else if(flag === "sub") { sum -= this.intArr[i]; } else if(flag === "mul") { sum *= this.intArr[i]; } else if(flag === "div") { sum /= this.intArr[i]; } } //恢复原始倍数 if(flag === "add") { //0.1+0.1 = ((0.1*10)+(0.1*10))/10 sum = sum / this.roundingNum; } else if(flag === "sub") { //0.1-0.1 = ((0.1*10)-(0.1*10))/10 sum = sum / this.roundingNum; } else if(flag === "mul") { //0.1*0.1 = ((0.1*10)*(0.1*10))/(10的平方) sum = sum / Math.pow(this.roundingNum, this.parameterNum); } else if(flag === "div") { //0.1/0.1 = (0.1*10)/(0.1*10) sum = sum; } return sum; }};console.log(calculationTools.mul("12.12", "10"));console.log(calculationTools.mul("0.1", "0.2", "0.3"));
阅读全文
0 0
- JS精确四则运算工具方法
- JS-精确四则运算
- java中BigDecimal类的精确四则运算工具类Arith
- java中BigDecimal类的精确四则运算工具类Arith
- javascript精确计算,四则运算
- js四则运算
- JavaScript js 精确、保留小数方法
- JavaScript js 精确、保留小数方法
- js浮点类型四则运算
- js浮点 四则运算
- js实现四则运算
- js实现四则运算
- js 工具方法
- js 工具类方法
- js工具方法
- js工具方法
- JS中用于精确计算的加减乘除方法
- JS计算浮点数加减乘除精确数值的方法
- Linux Shell编程入门第一课
- python中文转拼音
- 可伸缩定义,一个16位的变量分成2段保存数据
- java 三目运算--详解
- JAVA中的反射机制
- JS精确四则运算工具方法
- c#下使用EmguCV操作摄像头和最简单的人脸检测
- 01背包问题
- 洛谷 P2522 [HAOI2011]Problem b(莫比乌斯反演+容斥)
- 网狐棋牌源码架设教程-Inno一键自动搜索打包文件、子文件
- mybatis与spring集成 No.8
- java内部类总结
- js遍历数组时删除指定对象出现问题
- 《UNIX环境高级编程》笔记0--无缓存I/O操作和标准I/O文件操作区别