Js四则运算函数代码
- 格式:docx
- 大小:13.23 KB
- 文档页数:4
JavaScript四则运算:加减乘除这⼏天也在学习 javascript,前⼏⽇看了⼀篇关于解析四则运算表达式和算法的⽂章,觉得四则运算很常⽤,打算编写代码看看最终结果。
⾸先我看代码了解了两个关于算术或逻辑公式的表⽰法:中缀表⽰法以及逆波兰表⽰法,也学习了四则运算的实际转换过程(此定义在原⽂有详细解释)。
原⽂:分析了作者写的代码后,在此基础上加了些代码。
在这个过程中巩固学习了关于堆栈的知识以及栈(后进先出)和队列(先进先出)⽅法。
以下代码就是⾃认为⽐较完整的代码:⾸先判断加减乘除的优先级,* 和 / 的优先级⾼于 + 和 - :1function isOperator(value) {2var operatorString = "+-*/()";3return operatorString.indexOf(value) > -14 }56function getPrioraty(value) {7switch (value) {8case '+':9case '-':10return 1;11case '*':12case '/':13return 2;14default:15return 0;16 }17 }1819//判断加减乘除的优先级20function prioraty(o1, o2) {21return getPrioraty(o1) <= getPrioraty(o2);22 }定义输⼊、输出栈以及输出队列,循环逐个添加到输⼊栈的末尾,之后处理符号和数字,当找到 "(" 和 ")" 时特殊处理:1function dal2Rpn(exp) {2//输⼊栈3var inputStack = [];4//输出栈5var outputStack = [];6//输出队列7var outputQueue = [];89for (var i = 0, len = exp.length; i < len; i++) {10var cur = exp[i];11if (cur != ' ') {12 inputStack.push(cur); //+-*/() 数字,逐个添加到末尾13 }14 }1516//处理字符和数字17while (inputStack.length > 0) {1819//shift 顶部取得⼀项后移除,unshift 顶部推⼊20 cur = inputStack.shift();2122//如果是符号 --> + - * / ( )23if (isOperator(cur)) {24if (cur == '(') {25//push 从尾部推⼊⼀项26 outputStack.push(cur);27 } else if (cur == ')') {28//pop 从尾部取得⼀项,之后移出29var po = outputStack.pop();30while (po != '(' && outputStack.length > 0) {31 outputQueue.push(po);32 po = outputStack.pop();33 }34if (po != '(') {35throw "错误:没有匹配";36 }37 } else { //符号时,处理 + - * /38while (prioraty(cur, outputStack[outputStack.length - 1])39 && outputStack.length > 0) {40 outputQueue.push(outputStack.pop());41 }42 outputStack.push(cur);43 }44 } else { //是数字的时候,推⼊数字45 outputQueue.push(new Number(cur));46 }47 }4849if (outputStack.length > 0) {50if (outputStack[outputStack.length - 1] == ')'51 || outputStack[outputStack.length - 1] == '(') {52throw "错误:没有匹配";53 }54while (outputStack.length > 0) {55 outputQueue.push(outputStack.pop());56 }57 }58return evalRpn(outputQueue);59 }定义 evalRpn() 函数,输出堆栈的长度不⼩于2的时候,进⾏计算:1function evalRpn(queue) {2var outputStack = [];3while (queue.length > 0) {4var cur = queue.shift();56if (!isOperator(cur)) {7 outputStack.push(cur);8 } else {9//如果输出堆栈长度⼩于 210if (outputStack.length < 2) {11throw "⽆效堆栈长度";12 }13var second = outputStack.pop();14var first = outputStack.pop();1516 outputStack.push(getResult(first, second, cur));17 }18 }1920if (outputStack.length != 1) {21throw "不正确的运算";22 } else {23return outputStack[0];24 }25 }进⾏加减乘除计算之后,对其值进⾏操作,当浮点数的⼩数位超过两位时,只保留两位⼩数点: 1function getResult(first, second, operator){2var result = 0;3switch (operator) {4case '+':5 result = first + second;6break;7case '-':8 result = first - second;9break;10case '*':11 result = first * second;12break;13case '/':14 result = first / second;15break;16default:17return 0;18 }1920//浮点数的⼩数位超过两位时,只保留两位⼩数点21function formatFloat(f, digit) {22//pow(10,n) 为 10 的 n 次⽅23var m = Math.pow(10, digit);24return parseInt(f * m, 10) / m;25 }26return (formatFloat(result, 2));27 }输⼊要计算的表达式,计算结果 ( 结果得到 -0.6 ):1 var result=dal2Rpn('( 1 +2 ) * ((3 -4 ) / 5)');2 console.log(result); //输出结果。
js 正则表达式四则运算【实用版】目录1.JavaScript 正则表达式的概念和用途2.JavaScript 正则表达式的基本语法3.JavaScript 正则表达式的四则运算4.实例:使用 JavaScript 正则表达式进行四则运算正文一、JavaScript 正则表达式的概念和用途正则表达式(Regular Expression),简称 regex,是一种强大的文本处理工具,主要用于匹配和查找文本字符串中的模式。
在 JavaScript 中,正则表达式被广泛应用于验证表单、过滤数据、提取信息等场景。
二、JavaScript 正则表达式的基本语法1.字符类:用于匹配某一类字符- [abc]:匹配 a、b 或 c- [^abc]:匹配除方括号内字符以外的任意字符- [a-zA-Z]:匹配所有英文字母- d:匹配数字,等价于 [0-9]- D:匹配非数字,等价于 [^0-9]- s:匹配空白字符(空格、制表符、换行符等)- S:匹配非空白字符- w:匹配单词字符(字母、数字、下划线),等价于 [a-zA-Z0-9_] - W:匹配非单词字符2.量词:用于指定字符或字符类出现的次数-?:出现 0 次或 1 次- *:出现 0 次或多次- +:出现 1 次或多次- {n}:出现 n 次- {n,}:出现 n 次或多次- {n,m}:出现 n 到 m 次3.边界匹配符:用于指定匹配的位置- ^:匹配字符串的开头- $:匹配字符串的结尾- b:匹配单词边界- B:匹配非单词边界4.分组和捕获:用于将正则表达式的一部分组合在一起,以便进行特定操作- (pattern):匹配 pattern 并捕获结果,可以通过引用组号获取- (?:pattern):匹配 pattern 但不捕获结果5.修饰符:用于修改正则表达式的匹配方式- i:不区分大小写- g:全局匹配(默认为局部匹配)- m:多行匹配(默认为单行匹配)三、JavaScript 正则表达式的四则运算在 JavaScript 中,正则表达式的四则运算与数学中的加减乘除类似,可以进行字符串的拼接和替换。
JavaScript实现简单的四则运算计算器完整实例本⽂实例讲述了JavaScript实现简单的四则运算计算器。
分享给⼤家供⼤家参考,具体如下:运⾏效果图如下:完整实例代码如下:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>computer</title><script>function compute(){str1=Number(document.getElementById("txt1").value);str2=Number(document.getElementById("txt2").value);comp=document.getElementById("select").value;var result;switch(comp) {case "+":comp=str1+str2;break;case "-":comp=str1-str2;break;case "*":comp=str1*str2;break;case "/":if(str2==0){alert("除数不能为0!");comp='';}else{comp=str1/str2;}break;}document.getElementById("result").value=comp;}</script></head><body><input type="text" id="txt1"/><select name="method" id="select"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option></select><input type="text" id="txt2"/><input type="button" id="b1" value="等于" onclick="compute()" /><input type="text" id="result"/></body></html>PS:这⾥再为⼤家推荐⼏款计算⼯具供⼤家进⼀步参考借鉴:更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家JavaScript程序设计有所帮助。
Js四则运算精度问题处理JavaScript⼩数在做四则运算时,精度会丢失,这会在项⽬中引起诸多不便。
先看个具体的例⼦://较⼩的数运算console.log(0.09999999 + 0.00000001); //0.09999999999999999console.log(-0.09999999 - 0.00000001); //-0.09999999999999999console.log(0.012345 * 0.000001); //1.2344999999999999e-8console.log(0.000001 / 0.0001); //0.009999999999999998//较⼤的数运算console.log(999999999 * 111111111); //111111110888888900从上⾯的结果可以看出,都不是正确的。
为了解决浮点数运算不准确的问题,在运算前我们把参加运算的数先升级(10的X的次⽅)到整数,等运算完后再降级(0.1的X的次⽅)。
具体的操作如下:/*** 四则运算** @param x* @param y* @param op 操作符,0:加;1:减;2:乘;3:除* @param acc 保留⼩数位个数,进⾏四舍五⼊*/function execute(x, y, op, acc) {var xx = Number(x == undefined ? 0 : x);var yy = Number(y == undefined ? 0 : y);//var a = science(xx);var b = science(yy);var na = a.r1;var nb = b.r1;var ta = a.r2;var tb = b.r2;var maxt = Math.max(ta, tb);//精度值处理var result = 0;switch (parseInt(op, 10)) {case0: //加result = (xx * maxt + yy * maxt) / maxt;break;case1: //减result = (xx * maxt - yy * maxt) / maxt;break;case2: // 乘result = na * nb / (ta * tb);break;case3: // 除result = na / nb * (tb / ta);default:}//⼩数位数处理if (acc) {return Number(Number(result).toFixed(parseInt(acc)));} else {return Number(result);}}/*** 将数值升级(10的X的次⽅)到整数*/function science(num) {var re = {r1: 0, //数字去掉⼩数点后的值,也就是 r1*r2 的结果r2: 1//⼩数部分,10的长度次幂};if (isInteger(num)) { //整数直接返回re.r1 = num;return re;}var snum = scienceNum(num + ""); //处理0.123e-10类似问题var dotPos = snum.indexOf("."); //⼩数点位置var len = snum.substr(dotPos + 1).length; //⼩数点长度re.r2 = Math.pow(10, len);re.r1 = parseInt(snum.replace(".", ""));return re;}/*** 将数值转为字符串** 通过移动⼩数点扩⼤倍数或缩⼩倍数(解决出现e+、e-的问题)** JavaScript在以下情景会⾃动将数值转换为科学计数法:* 1)⼩数点前的数字多于21位。
js的四则运算JS是一种广泛应用于网页开发的脚本语言,它具备强大的四则运算能力。
在本文中,我们将探讨JS中的四则运算,并介绍一些常见的运算符和操作。
四则运算是数学中最基本的运算方式,包括加法、减法、乘法和除法。
在JS中,我们可以使用加号(+)进行加法运算,减号(-)进行减法运算,星号(*)进行乘法运算,斜杠(/)进行除法运算。
让我们来看看加法运算。
在JS中,加法运算可以用于两个数值的相加,也可以用于字符串的连接。
例如,我们可以使用加法运算符将两个数字相加,如下所示:```javascriptlet num1 = 10;let num2 = 20;let sum = num1 + num2;console.log(sum); // 输出30```加法运算符也可以用于字符串的连接。
例如:```javascriptlet str1 = "Hello";let str2 = "World";let result = str1 + " " + str2;console.log(result); // 输出 "Hello World"```接下来,让我们来看看减法运算。
在JS中,减法运算可以用于两个数值的相减。
例如:```javascriptlet num1 = 10;let num2 = 5;let difference = num1 - num2;console.log(difference); // 输出5```然后,让我们来看看乘法运算。
在JS中,乘法运算可以用于两个数值的相乘。
例如:```javascriptlet num1 = 10;let num2 = 3;let product = num1 * num2;console.log(product); // 输出30```让我们来看看除法运算。
在JS中,除法运算可以用于两个数值的相除。
Js四则运算函数代码复制代码代码如下://除法函数,⽤来得到精确的除法结果//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会⽐较明显。
这个函数返回较为精确的除法结果。
//调⽤:accDiv(arg1,arg2)//返回值:arg1除以arg2的精确结果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 (r1/r2)*pow(10,t2-t1);}}//给Number类型增加⼀个div⽅法,调⽤起来更加⽅便。
Number.prototype.div = function (arg){return accDiv(this, arg);};//乘法函数,⽤来得到精确的乘法结果//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会⽐较明显。
这个函数返回较为精确的乘法结果。
//调⽤:accMul(arg1,arg2)//返回值:arg1乘以arg2的精确结果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);}//给Number类型增加⼀个mul⽅法,调⽤起来更加⽅便。
js中简单计算器的代码JS中实现一个简单的计算器并不困难,我们只需利用基本的数学运算符和JavaScript的语法即可。
下面是一个实现加、减、乘、除四则运算的计算器的JavaScript代码示例:```javascript// 获取计算器的元素var calculator = document.getElementById('calculator'); // 获取数字、运算符和结果显示区域的元素var num1 = document.getElementById('num1');var num2 = document.getElementById('num2');var operator = document.getElementById('operator');var result = document.getElementById('result');// 给运算符按钮添加事件处理函数var addButton = document.getElementById('add');addButton.addEventListener('click', function() {var n1 = parseFloat(num1.value);var n2 = parseFloat(num2.value);result.innerHTML = n1 + n2;});var subtractButton =document.getElementById('subtract');subtractButton.addEventListener('click', function() {var n1 = parseFloat(num1.value);var n2 = parseFloat(num2.value);result.innerHTML = n1 - n2;});var multiplyButton =document.getElementById('multiply');multiplyButton.addEventListener('click', function() { var n1 = parseFloat(num1.value);var n2 = parseFloat(num2.value);result.innerHTML = n1 * n2;});var divideButton = document.getElementById('divide'); divideButton.addEventListener('click', function() {var n1 = parseFloat(num1.value);var n2 = parseFloat(num2.value);result.innerHTML = n1 / n2;});```在以上代码中,我们定义了四个函数来处理加、减、乘、除四则运算。
js做四则运算时,精度丢失问题及解决⽅法之前项⽬上出现过这样⼀个bug,就是明明两个数都是⼀样的但是就是莫名其妙的报出两个数不相等,导致流程⽆法继续下去然后我把所有数据导出来,进⾏⼀对⼀⽐对,只是⼀个很耗时的过程,最终让我找到因为js计算过后会出现计算精度丢失的问题找到问题所在就好说了,然后就开始解决这个让我为难了好长时间的问题废话不多说直接上代码/*** 解决两个数相加精度丢失问题* @param a* @param b* @returns {Number}*/function floatAdd(a, b) {var c, d, e;if(undefined==a||null==a||""==a||isNaN(a)){a=0;}if(undefined==b||null==b||""==b||isNaN(b)){b=0;}try {c = a.toString().split(".")[1].length;} catch (f) {c = 0;}try {d = b.toString().split(".")[1].length;} catch (f) {d = 0;}e = Math.pow(10, Math.max(c, d));return (floatMul(a, e) + floatMul(b, e)) / e;}/*** 解决两个数相减精度丢失问题* @param a* @param b* @returns {Number}*/function floatSub(a, b) {var c, d, e;if(undefined==a||null==a||""==a||isNaN(a)){a=0;}if(undefined==b||null==b||""==b||isNaN(b)){b=0;}try {c = a.toString().split(".")[1].length;} catch (f) {c = 0;}try {d = b.toString().split(".")[1].length;} catch (f) {d = 0;}e = Math.pow(10, Math.max(c, d));return (floatMul(a, e) - floatMul(b, e)) / e;}/*** 解决两个数相乘精度丢失问题* @param a* @param b* @returns {Number}*/function floatMul(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);}/*** 解决两个数相除精度丢失问题* @param a* @param b* @returns*/function floatDiv(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(".", "")), floatMul(c / d, Math.pow(10, f - e));}以上就解决js精度丢失原理也很简单就是很好的运⽤了我们⼩学所学的算术的⼩数相乘/相加/相减/相除后⼩数位的变化规律来进⾏精度的换算。
加减乘除四则运算(javascript)1、调用方法:var str = "1+3+4-5-6*7/8+9-10/11"; //具体的计算公式calcArith(str); //调用函数2、函数实现://主调用函数function calcArith(strV) {if (("+-*/").indexOf(strV.substring(0,1)) >= 0) {strV = strV.substring(1,strV.length);}//限制公式中只能出现“数字、+、-、*、/” ,其它的(包含空格字符),视为非法字符直接退出。
var regExp = new RegExp("[^(0-9,\+,\\-,\*,\/,\s)]");if (regExp.test(strV)) {alert("表达式中含有非数字及运算字符!");return 0.0;}//计算加法return exA(strV);}function exA(strV) {var dJe = 0.0;if (strV == "") {return dJe;}if (strV.indexOf("+") > 0) {var arryTemp = strV.split("+");dJe = exP(arryTemp[0]);for (var i=1;i < arryTemp.length;i++) {dJe += exP(arryTemp[i]);}}else {dJe = exP(strV);}return dJe;}//计算减法function exP(strV) {var dJe = 0.0;if (strV == "") {return dJe;}if (strV.indexOf("-") > 0) {var arryTemp = strV.split("-");dJe = exX(arryTemp[0]);for (var i=1;i < arryTemp.length;i++) { dJe -= exX(arryTemp[i]);}}else {dJe = exX(strV);}return dJe;}//计算乘法function exX(strV) {var dJe = 0.0;if (strV == "") {return dJe;}if (strV.indexOf("*") > 0) {var arryTemp = strV.split("*");dJe = exX(arryTemp[0]);for (var i=1;i < arryTemp.length;i++) { dJe *= exC(arryTemp[i]);}}else {dJe = exC(strV);}return dJe;}//计算除法function exC(strV) {var dJe = 1.0;if (strV == "") {return dJe;}if (strV.indexOf("/") > 0) {var arryTemp = strV.split("/");dJe = exX(arryTemp[0]);for (var i=1;i < arryTemp.length;i++) {dJe /= parseFloat(arryTemp[i]);}}else {dJe = parseFloat(strV);}return dJe;}PS:项目中要用到这个四则运算,找找没找到,自己写了一个。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系js实现一个粗略的四则运算解释器2017/09/03 0 这样的一个解释器几乎没用,不过只是为了学习一下解释器的知识,有空继续学习。
支持纯变量的解释,解释器第一个参数为纯变量的字符串,第二个参数为解释上下文,也就是变量的值。
支持四则运算,括号 function Context(map) { this.map = map;}Context.prototype.getContext = function() { return this.map;}var context;function AbstractExpression() {}AbstractExpression.prototype.interpret = function() {}function TerminalExpression(val) { this.val = val;}TerminalExpression.prototype = new AbstractExpression();TerminalExpression.prototype.interpret = function(isRaw) { if (!isNaN(+this.val)) { return this.val; } var result = context.getContext()[this.val]; if (!result) { throw new Error(‘‘); return; } return result;}function NonTerminalExpression(left, right) { this.left = left; this.right = right;}NonTerminalExpression.prototype = new AbstractExpression();NonTerminalExpression.prototype.interpret = function() {}function AddExpression(left, right) { NonTerminalExpression.call(this, left, right);}AddExpression.prototype = new NonTerminalExpression();AddExpression.prototype.interpret = function() { return this.left.interpret() + this.right.interpret();}function SubExpression(left, right) { NonTerminalExpression.call(this, left, right);}SubExpression.prototype = new NonTerminalExpression();SubExpression.prototype.interpret = function() { return this.left.interpret() - this.right.interpret();}function MulExpression(left, right) { NonTerminalExpression.call(this, left, right);}MulExpression.prototype = new NonTerminalExpression();MulExpression.prototype.interpret = function() { return this.left.interpret() * this.right.interpret();}function DivExpression(left, right) { NonTerminalExpression.call(this, left, right);}DivExpression.prototype = new。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。