html算术计算,js实现计算器 提供算术表达式求值
//html
計(jì)算器@import "calculator.css";
//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)先級
{
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<
}
}
function isNum( ch)?????????????????????????????? //判斷讀取ch是否為操作數(shù)
{
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='@')
return 0;
else
return 1;
}
function extend(str)?????? //將開始一定情況下‘-’轉(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
{
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
{
//? 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'
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;
}
總結(jié)
以上是生活随笔為你收集整理的html算术计算,js实现计算器 提供算术表达式求值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平安新一代是什么贷款
- 下一篇: 计算机专业需要转正定级吗,全日制本科考进