芊芊学网

网站首页 首页 > 就业前景 > 正文

简易计算机(简易计算机代码)

2024-06-03 09:27 就业前景 来源:

大家好,今日小源来为大家解答以上的问题。简易计算机,简易计算机代码很多人还不知道,现在让我们一起来看看吧!

1、JaScript计算器p {font-size: 12pt}.red {color: red;width:34}.redl{color:red;width:51}.blue {color: blue;width:34} calculate.js(function(){//这里是定义一个控制器,用来对外开放计算接口和拦截计算中出现的异常oController = {addNumber : function(tok){if(errorState()) return errorResult(); else return addNumber(tok)},addOper : function(tok){if(errorState()) return errorResult(); else return addOper(tok)},doFun : function(tok){if(errorState()) {return errorResult();} else return doFun(tok)},cleanError : cleanError}//用来保存记忆的变量var memery = 0;//这是符号对应的计算规则,这里采用一个闭包的对照表来处理var opMap = {"+":function(a,b){return b + a}, //处理加法运算的闭包"-":function(a,b){return b - a}, //处理减法运算的闭包"":function(a,b){return b a}, //处理乘法运算的闭包"/":function(a,b){return b / a}, //处理除法运算的闭包"=":function(a,b){return a}, //处理终结果"C":init, //清零"CE":init, //清零"sqrt":function(a){return Math.sqrt(a)}, //计算开方"1/x":function(a){return 1/a}, //计算倒数"%":function(a){return a/100}, //求余数"+/-":function(a){return -a}, //正负号"MS":function(a){memery = a; return a}, //记忆"M+":function(a){memery += a; return a}, //累加记忆"MR":function(a){return memery}, //从记忆中读取"MC":function(a){memery = 0; return a} //清除记忆}//用来存储数值、作符和输入缓存的数据结构var oMemery = {numStack : [], //存储数值operStack : [], //存储字符串inBuffer : "" //输入显示缓存}//检测计算中出现的数字异常,若有,返回给控制器进行处理function errorState(){with(oMemery){var n = numStack[numStack.length - 1];return n == Infinity || isNaN(n);}}//若出现异常,这个函数提供出现异常时的数值结果(数值堆栈顶的值)function errorResult(){with(oMemery){return formatBuff(numStack[numStack.length - 1]);}}//清除异常并从错误中恢复function cleanError(){with(oMemery){numStack[numStack.length - 1] = 0;}}function init() //初始化{with(oMemery){numStack.length = 0; //清空数值堆栈operStack.length = 0; //清空作符堆栈numStack.push(0); //在数值堆栈中推入一个0作为栈顶inBuffer = ""; //清空输入缓存return inBuffer; //将清空后的缓存值(实际上是空字符串'')返回}}function doOper() //计算表达式{with(oMemery){if(operStack.length) //如果运算符堆栈中有值{try{//取得栈顶运算符对应的作方法var op = opMap[operStack.pop()];var args = [];//该方法需要提供几个作数,可以通过检查op.length得到for(var i = 0; i {//从数值堆栈中依次取相应的作数进行处理args.push(numStack.pop());}//在这里实际进行计算,并把计算结果重新压入堆栈numStack.push(op.apply(this, args));}catch(ex){alert(ex.message);}}return numStack[numStack.length - 1];}}//格式化显示的数值,主要是为了符合计算器的习惯,比如0显示成0.(带小数点)function formatBuff(buf){if(buf == "")return "0.";else{buf = parseFloat(buf);return /\./.test(buf) ? buf : buf + ".";}}function addNumber(tok) //输入数值{with(oMemery){try{var token;if(tok == "\b") //如果输入的是一个退格token = inBuffer.slice(0,-1); //那么把缓存中的内容去掉一个elsetoken = inBuffer + tok.toString(); //否则接受新输入的数字//如果数值的位是小数点,显示的时候要补一个0if(token.slice(0,1) == ".") token = 0 + token;//判断输入接收后的结果是否满足数值的格式if(/^([\d]+(\.)?[\d])?$/.test(token)){inBuffer = token; //如果满足,则确认接受,写入缓存}return formatBuff(inBuffer);}catch(ex){alert(ex.message);}}}function addOper(tok) //输入运算符{with(oMemery){try{//如果缓存中有数值,将它推入数值堆栈if(inBuffer != "")numStack.push(parseFloat(inBuffer));//否则从作符堆栈中将前一个输入的作符弹出用当前作符替代elseoperStack.pop();var ret = doOper(); //计算表达式operStack.push(tok); //将新输入的运算符推入堆栈inBuffer = ""; //清空输入缓存return formatBuff(ret);}catch(ex){alert(ex.message);}}}function doFun(tok) //处理函数{with(oMemery){try{//假如是一些函数如sqrtvar fun = opMap[tok];//如果输入缓存无内容if(inBuffer == "")inBuffer = numStack.pop(); //从数值堆栈中取数elseoperStack.push(tok); //否则将函数推入作符堆栈//计算函数调用结果并放入数值堆栈numStack.push(fun(parseFloat(inBuffer)));inBuffer = ""; //清空缓存return formatBuff(numStack[numStack.length - 1]);}catch(ex){alert(ex.message);}}}init(); //这里执行前面定义的初始化函数})();。

本文到这结束,希望上面文章对大家有所帮助。


免责声明: 本文由用户上传,如有侵权请联系删除!


标签:

最新文章
热评文章
随机文章