欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實(shí)現(xiàn)可針對(duì)算術(shù)表達(dá)式求值的計(jì)算器功能示例

 更新時(shí)間:2018年09月04日 08:45:50   作者:test_ld  
這篇文章主要介紹了JS實(shí)現(xiàn)可針對(duì)算術(shù)表達(dá)式求值的計(jì)算器功能,可實(shí)現(xiàn)基本的數(shù)字四則運(yùn)算功能,涉及javascript基本數(shù)值運(yùn)算與流程控制、判斷等操作技巧,需要的朋友可以參考下

本文實(shí)例講述了JS實(shí)現(xiàn)可針對(duì)算術(shù)表達(dá)式求值的計(jì)算器功能。分享給大家供大家參考,具體如下:

HTML部分:

<div>
 <div id="in">
  <input name="in" type="text"  class="clsin" id="input" value="" readonly="readonly" />
  <input type="button" name="=" value="=" onClick="exp_result()"/>
 </div>
 <div id="num">
 <input type="button" name="seven" value="7" onClick="test(this);"/>
 <input type="button" name="8" value="8" onClick="test(this);"/>
 <input type="button" name="9" value="9" onClick="test(this)"/>
 <input type="button" name="/" value="/" onClick="test(this)"/>
 <!--span id="showValue"></span-->
 <br />
 <input type="button" name="4" value="4" onClick="test(this)"/>
 <input type="button" name="5" value="5" onClick="test(this)" />
 <input type="button" name="6" value="6" onClick="test(this)"/>
  <input type="button" name="*" value="*" onClick="test(this)"/>
 <br />
 <input type="button" name="1" value="1" onClick="test(this);"/>
 <input type="button" name="2" value="2" onClick="test(this);"/>
 <input type="button" name="3" value="3" onClick="test(this);"/>
  <input type="button" name="-" value="-" onClick="test(this);"/>
 <br />
 <input type="button" name="0" value="0"   onClick="test(this);"/>
 <input type="button" name="+/-" value="("  onClick="test(this);"/>
 <input type="button" name="." value=")"   onClick="test(this);"/>
 <input type="button" name="+" value="+"   onClick="test(this);"/>
 </div>
</div>

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( ch1, ch2)         //比較運(yùn)算符ch1和ch2優(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;ch1!=array1[i];i++);
  for(var j=0;ch2!=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"<<endl;return 0;
  }
}
function isNum( ch)                //判斷讀取ch是否為操作數(shù)
{
  if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='@')
    return 0;
  else
    return 1;
}
function extend(str)    //將開(kāi)始一定情況下‘-'轉(zhuǎn)換為'(0-1)*',從而支持負(fù)數(shù)
{
   var str1=new Array();
   if(str.charAt(0)=='-')
   {
     str1+="(0-1)*";
   }
   else
   {
    str1+=str.charAt(0);
   }
   for(var i=1;i<str.length;i++)
   {
     if(str.charAt(i)=='-'&&str.charAt(i-1)=='(')
     {
      str1+="(0-1)*";
     }
     else
     str1+=str.charAt(i);
   }
   return str1;
}
function divided(str)  //分離表達(dá)式中操作數(shù)與操作符存放到返回值中
{
 var str2=extend(str);
// alert(str2);
 var str_temp=new Array();
 var j=0;
 var expTemp;
 var expPre;
 for(var i=0;i<str2.length;i++)
 {
  // alert(str2.charAt(i));
   expTemp="";
   expTemp=str2.charAt(i);
   if(i==0)
   str_temp[0]=expTemp;
   if(i>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ì)有所幫助。

相關(guān)文章

  • js模擬實(shí)現(xiàn)百度搜索

    js模擬實(shí)現(xiàn)百度搜索

    這篇文章主要為大家詳細(xì)介紹了js模擬實(shí)現(xiàn)百度搜索,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • uniapp小程序開(kāi)發(fā)組件封裝之自定義輪播圖效果

    uniapp小程序開(kāi)發(fā)組件封裝之自定義輪播圖效果

    這篇文章主要介紹了uniapp小程序開(kāi)發(fā)組件封裝之自定義輪播圖,本文主要展示小程序端封裝輪播圖組件,使用的是uniapp進(jìn)行的開(kāi)發(fā),主要使用的是uniapp官網(wǎng)提供的swiper組件,需要的朋友可以參考下
    2023-02-02
  • GoJs基本使用示例詳解

    GoJs基本使用示例詳解

    這篇文章主要為大家介紹了GoJs基本使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 三種在ES6中將非數(shù)組轉(zhuǎn)換為數(shù)組的方法詳情

    三種在ES6中將非數(shù)組轉(zhuǎn)換為數(shù)組的方法詳情

    這篇文章主要介紹了三種在ES6中將非數(shù)組轉(zhuǎn)換為數(shù)組的方法詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • javascript jq 彈出層實(shí)例

    javascript jq 彈出層實(shí)例

    javascript jq 彈出提示效果實(shí)現(xiàn)的方法有很多,可能會(huì)在某些地方看到過(guò),下面為大家演示個(gè)示例介紹下如何實(shí)現(xiàn)jq 彈出層,感興趣的朋友可以參考下
    2013-08-08
  • JS+css3實(shí)現(xiàn)幻燈片輪播圖

    JS+css3實(shí)現(xiàn)幻燈片輪播圖

    這篇文章主要為大家詳細(xì)介紹了JS+css3實(shí)現(xiàn)幻燈片輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Uniapp自定義導(dǎo)航欄并自適應(yīng)機(jī)型的實(shí)現(xiàn)方法

    Uniapp自定義導(dǎo)航欄并自適應(yīng)機(jī)型的實(shí)現(xiàn)方法

    Uniapp 是一款跨平臺(tái)開(kāi)發(fā)框架,可以同時(shí)開(kāi)發(fā)出可以在多個(gè)平臺(tái)上運(yùn)行的應(yīng)用,在開(kāi)發(fā)過(guò)程中,我們常常需要自定義導(dǎo)航欄來(lái)滿足 UI 設(shè)計(jì)的需求,本文將介紹如何在 Uniapp 中自定義導(dǎo)航欄并自適應(yīng)不同機(jī)型的屏幕大小,需要的朋友可以參考下
    2023-09-09
  • js插件dropload上拉下滑加載數(shù)據(jù)實(shí)例解析

    js插件dropload上拉下滑加載數(shù)據(jù)實(shí)例解析

    這篇文章主要為大家詳細(xì)解析了js插件dropload上拉下滑加載數(shù)據(jù)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 頂部緩沖下拉菜單導(dǎo)航特效的JS代碼

    頂部緩沖下拉菜單導(dǎo)航特效的JS代碼

    這篇文章介紹了頂部緩沖下拉菜單導(dǎo)航特效的JS代碼,有需要的朋友可以參考一下
    2013-08-08
  • JavaScript數(shù)組函數(shù)unshift、shift、pop、push使用實(shí)例

    JavaScript數(shù)組函數(shù)unshift、shift、pop、push使用實(shí)例

    這篇文章主要介紹了JavaScript數(shù)組函數(shù)unshift、shift、pop、push使用實(shí)例,本文先是講解了聲明數(shù)組的方法,然后對(duì)4個(gè)函數(shù)使用給出了一些例子,需要的朋友可以參考下
    2014-08-08

最新評(píng)論