本文實(shí)例講述了JS實(shí)現(xiàn)可針對(duì)算術(shù)表達(dá)式求值的計(jì)算器功能。分享給大家供大家參考,具體如下:
創(chuàng)新互聯(lián)公司長(zhǎng)期為近千家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為平房企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站制作、做網(wǎng)站,平房網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
HTML部分:
CSS部分:
/* CSS Document */ body { /* padding-right:40%; padding-left:40%;*/ text-align:center; } div{ background-color:orange; height:300px; width:300px; margin-left:auto; margin-right:auto; margin-bottom:auto; margin-top:50px; border-style: groove; border-color: Green; /* margin-top:auto;*/ } #in{ position:relative; margin-left:20px; margin-top:10px; height:27px; width:260px; background:red; top:40px } .clsin { height:27px; width:200px; background-color:#FFF; } #num{ position:relative; margin-left:20px; margin-top:45px; height:150px; width:250px; background-color:green; text-align:left; } #num input { margin-right:10px; margin-top:10px; width:35px; }
js部分:
str_exp=""; //存放表達(dá)式 function test(obj) //數(shù)字 運(yùn)算符 btn click { str_exp+=obj.value; document.getElementById("input").value=str_exp; } function compare( ch2, ch3) //比較運(yùn)算符ch2和ch3優(yōu)先級(jí) { array1=new Array('+','-','*','/','(',')','@'); array20=new Array('>','>','<','<','<','>', '>'); array21=new Array( '>','>','<','<','<','>','>'); array22=new Array( '>','>','>','>','<','>','>'); array23=new Array('>','>','>','>','<','>','>'); array24=new Array('<','<','<','<','<','=',' '); array25=new Array('>','>','>','>',' ','>','>'); array26=new Array( '<','<','<','<','<',' ','='); array2=new Array(array20,array21,array22,array23,array24,array25,array26); // b[7][7]={'>','>','<','<','<','>','>', // + // '>','>','<','<','<','>','>', // - // '>','>','>','>','<','>','>', // * // '>','>','>','>','<','>','>', // / // '<','<','<','<','<','=',' ', // ( // '>','>','>','>',' ','>','>', // ) // '<','<','<','<','<',' ','=' }; // @ for(var i=0;ch2!=array1[i];i++); for(var j=0;ch3!=array1[j];j++); return array2[i][j]; } function operate(a,preop,b) //計(jì)算a?b的值 { // var num1=parseInt(a,10); // var num2=parseInt(b,10); var num1=parseFloat(a); var num2=parseFloat(b); // alert("a:"+num1+preop+"b:"+num2); switch(preop) { case'+':return(num1+num2);break; case'-':return(num1-num2);break; case'*':return(num1*num2);break; case'/':return(num1/num2);break; // default: cout<<"erro"<0) { expPre=str2.charAt(i-1); ///////////////////////!! if(isNum(expTemp)&&isNum(expPre)) //判斷前后連續(xù)取到的是否都是數(shù)字字符,是則拼接 { str_temp[j-1]+=expTemp; j--; } else { str_temp[j]=expTemp; } } j++; } return str_temp; } function exp_result() { str_exp=str_exp+'@'; str=divided(str_exp); numArray=new Array(); //存放操作數(shù) symbolArray =new Array();//存放操作符 symbolArray.push('@'); // numArray.push('@'); // alert(str.length); for(var i=0;str[i]!='@'||symbolArray[symbolArray.length-1]!='@';i++) { // alert(str[i]); // alert(symbolArray[symbolArray.length-1]); if(isNum(str[i])) { // alert("Num push:"+str[i]); numArray.push(str[i]); } else { // alert("symbol:"+str[i]); preop=symbolArray[symbolArray.length-1]; //取棧頂元素 switch(compare(preop,str[i])) { case'<':symbolArray.push(str[i]);break; case'=':symbolArray.pop();break; case'>':b=numArray.pop();a=numArray.pop();preop=symbolArray.pop(); //取兩操作數(shù)與之前操作符運(yùn)算 numArray.push(operate(a,preop,b)); //計(jì)算結(jié)果入棧 // str.push(str[i]); //當(dāng)前操作符入棧 i--; //繼續(xù)與之前的操作符比較 break; } } } if(isNaN(numArray[0])) { alert("算術(shù)表達(dá)式輸入有誤!!"); } else alert("結(jié)果為:"+numArray[0]); str_exp=""; document.getElementById("input").value=str_exp; }
運(yùn)行效果如下圖所示:
感興趣的朋友可以使用在線HTML/CSS/JavaScript前端代碼調(diào)試運(yùn)行工具:http://tools.jb51.net/code/WebCodeRun測(cè)試上述代碼運(yùn)行效果。
PS:這里再為大家推薦幾款計(jì)算工具供大家進(jìn)一步參考借鑒:
在線一元函數(shù)(方程)求解計(jì)算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科學(xué)計(jì)算器在線使用_高級(jí)計(jì)算器在線計(jì)算:
http://tools.jb51.net/jisuanqi/jsqkexue
在線計(jì)算器_標(biāo)準(zhǔn)計(jì)算器:
http://tools.jb51.net/jisuanqi/jsq
更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專(zhuān)題:《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript操作DOM技巧總結(jié)》及《JavaScript字符與字符串操作技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。