用Javascript编写的科学计算器.docx
《用Javascript编写的科学计算器.docx》由会员分享,可在线阅读,更多相关《用Javascript编写的科学计算器.docx(30页珍藏版)》请在冰豆网上搜索。
用Javascript编写的科学计算器
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
.b1{
BORDER-BOTTOM:
#b2b2b21pxsolid;BORDER-LEFT:
#b2b2b21pxsolid;BACKGROUND-COLOR:
#fbfbfb;WIDTH:
43px;FONT-FAMILY:
"宋体";BACKGROUND-POSITION:
center50%;HEIGHT:
23px;COLOR:
#313596;FONT-SIZE:
12px;BORDER-TOP:
#b2b2b21pxsolid;BORDER-RIGHT:
#b2b2b21pxsolid
}
.b2{
BORDER-BOTTOM:
#b2b2b21pxsolid;BORDER-LEFT:
#b2b2b21pxsolid;BACKGROUND-COLOR:
#fbfbfb;WIDTH:
43px;BACKGROUND-POSITION:
center50%;HEIGHT:
23px;COLOR:
#fe3498;FONT-SIZE:
12px;BORDER-TOP:
#b2b2b21pxsolid;BORDER-RIGHT:
#b2b2b21pxsolid
}
.b3{
BORDER-BOTTOM:
#b2b2b21pxsolid;BORDER-LEFT:
#b2b2b21pxsolid;BACKGROUND-COLOR:
#fbfbfb;WIDTH:
61px;BACKGROUND-POSITION:
center50%;HEIGHT:
23px;COLOR:
#ff6501;FONT-SIZE:
12px;BORDER-TOP:
#b2b2b21pxsolid;BORDER-RIGHT:
#b2b2b21pxsolid
}
.b4{
BORDER-BOTTOM:
#b2b2b21pxsolid;BORDER-LEFT:
#b2b2b21pxsolid;BACKGROUND-COLOR:
#fbfbfb;WIDTH:
32px;BACKGROUND-POSITION:
center50%;HEIGHT:
23px;COLOR:
#888485;FONT-SIZE:
12px;BORDER-TOP:
#b2b2b21pxsolid;BORDER-RIGHT:
#b2b2b21pxsolid
}
.border{
BORDER-BOTTOM:
#b1bac31pxsolid;BORDER-LEFT:
#b1bac31pxsolid;BORDER-TOP:
#b1bac31pxsolid;BORDER-RIGHT:
#b1bac31pxsolid
}
.dh{
BORDER-BOTTOM:
#b2b2b21pxsolid;BORDER-LEFT:
#b2b2b21pxsolid;BACKGROUND-COLOR:
#fbfbfb;WIDTH:
40px;BACKGROUND-POSITION:
center50%;HEIGHT:
23px;COLOR:
#868485;FONT-SIZE:
12px;BORDER-TOP:
#b2b2b21pxsolid;BORDER-RIGHT:
#b2b2b21pxsolid
}
.or{
BORDER-BOTTOM:
#b2b2b21pxsolid;BORDER-LEFT:
#b2b2b21pxsolid;BACKGROUND-COLOR:
#fbfbfb;WIDTH:
40px;BACKGROUND-POSITION:
center50%;HEIGHT:
23px;COLOR:
#fe6700;FONT-SIZE:
12px;BORDER-TOP:
#b2b2b21pxsolid;BORDER-RIGHT:
#b2b2b21pxsolid
}
.xn{
BORDER-BOTTOM:
#b2b2b21pxsolid;BORDER-LEFT:
#b2b2b21pxsolid;BACKGROUND-COLOR:
#fbfbfb;WIDTH:
32px;BACKGROUND-POSITION:
center50%;HEIGHT:
23px;COLOR:
#313398;FONT-SIZE:
12px;BORDER-TOP:
#b2b2b21pxsolid;BORDER-RIGHT:
#b2b2b21pxsolid
}
.xo{
BORDER-BOTTOM:
#b2b2b21pxsolid;BORDER-LEFT:
#b2b2b21pxsolid;BACKGROUND-COLOR:
#fbfbfb;WIDTH:
32px;BACKGROUND-POSITION:
center50%;HEIGHT:
23px;COLOR:
#ff6701;FONT-SIZE:
12px;BORDER-TOP:
#b2b2b21pxsolid;BORDER-RIGHT:
#b2b2b21pxsolid
}
--
varendNumber=true
varmem=0
varcarry=10
varhexnum="0123456789abcdef"
varangle="d"
varstack=""
varlevel="0"
varlayer=0
//数字键
functioninputkey(key)
{
varindex=key.charCodeAt(0);
if((carry==2&&(index==48||index==49))
||(carry==8&&index>=48&&index<=55)
||(carry==10&&(index>=48&&index<=57||index==46))
||(carry==16&&((index>=48&&index<=57)||(index>=97&&index<=102))))
if(endNumber)
{
endNumber=false
document.calc.display.value=key
}
elseif(document.calc.display.value==null||document.calc.display.value=="0")
document.calc.display.value=key
else
document.calc.display.value+=key
}
functionchangeSign()
{
if(document.calc.display.value!
="0")
if(document.calc.display.value.substr(0,1)=="-")
document.calc.display.value=document.calc.display.value.substr
(1)
else
document.calc.display.value="-"+document.calc.display.value
}
//函数键
functioninputfunction(fun,shiftfun)
{
endNumber=true
if(document.calc.shiftf.checked)
document.calc.display.value=decto(funcalc(shiftfun,(todec(document.calc.display.value,carry))),carry)
else
document.calc.display.value=decto(funcalc(fun,(todec(document.calc.display.value,carry))),carry)
document.calc.shiftf.checked=false
document.calc.hypf.checked=false
inputshift()
}
functioninputtrig(trig,arctrig,hyp,archyp)
{
if(document.calc.hypf.checked)
inputfunction(hyp,archyp)
else
inputfunction(trig,arctrig)
}
//运算符
functionoperation(join,newlevel)
{
endNumber=true
vartemp=stack.substr(stack.lastIndexOf("(")+1)+document.calc.display.value
while(newlevel!
=0&&(newlevel<=(level.charAt(level.length-1))))
{
temp=parse(temp)
level=level.slice(0,-1)
}
if(temp.match(/^(.*\d[\+\-\*\/\%\^\&\|x])?
([+-]?
[0-9a-f\.]+)$/))
document.calc.display.value=RegExp.$2
stack=stack.substr(0,stack.lastIndexOf("(")+1)+temp+join
document.calc.operator.value=""+join+""
level=level+newlevel
}
//括号
functionaddbracket()
{
endNumber=true
document.calc.display.value=0
stack=stack+"("
document.calc.operator.value=""
level=level+0
layer+=1
document.calc.bracket.value="(="+layer
}
functiondisbracket()
{
endNumber=true
vartemp=stack.substr(stack.lastIndexOf("(")+1)+document.calc.display.value
while((level.charAt(level.length-1))>0)
{
temp=parse(temp)
level=level.slice(0,-1)
}
document.calc.display.value=temp
stack=stack.substr(0,stack.lastIndexOf("("))
document.calc.operator.value=""
level=level.slice(0,-1)
layer-=1
if(layer>0)
document.calc.bracket.value="(="+layer
else
document.calc.bracket.value=""
}
//等号
functionresult()
{
endNumber=true
while(layer>0)
disbracket()
vartemp=stack+document.calc.display.value
while((level.charAt(level.length-1))>0)
{
temp=parse(temp)
level=level.slice(0,-1)
}
document.calc.display.value=temp
document.calc.bracket.value=""
document.calc.operator.value=""
stack=""
level="0"
}
//修改键
functionbackspace()
{
if(!
endNumber)
{
if(document.calc.display.value.length>1)
document.calc.display.value=document.calc.display.value.substring(0,document.calc.display.value.length-1)
else
document.calc.display.value=0
}
}
functionclearall()
{
document.calc.display.value=0
endNumber=true
stack=""
level="0"
layer=""
document.calc.operator.value=""
document.calc.bracket.value=""
}
//转换键
functioninputChangCarry(newcarry)
{
endNumber=true
document.calc.display.value=(decto(todec(document.calc.display.value,carry),newcarry))
carry=newcarry
document.calc.sin.disabled=(carry!
=10)
document.calc.cos.disabled=(carry!
=10)
document.calc.tan.disabled=(carry!
=10)
document.calc.bt.disabled=(carry!
=10)
document.calc.pi.disabled=(carry!
=10)
document.calc.e.disabled=(carry!
=10)
document.calc.kp.disabled=(carry!
=10)
document.calc.k2.disabled=(carry<=2)
document.calc.k3.disabled=(carry<=2)
document.calc.k4.disabled=(carry<=2)
document.calc.k5.disabled=(carry<=2)
document.calc.k6.disabled=(carry<=2)
document.calc.k7.disabled=(carry<=2)
document.calc.k8.disabled=(carry<=8)
document.calc.k9.disabled=(carry<=8)
document.calc.ka.disabled=(carry<=10)
document.calc.kb.disabled=(carry<=10)
document.calc.kc.disabled=(carry<=10)
document.calc.kd.disabled=(carry<=10)
document.calc.ke.disabled=(carry<=10)
document.calc.kf.disabled=(carry<=10)
}
functioninputChangAngle(angletype)
{
endNumber=true
angle=angletype
if(angle=="d")
document.calc.display.value=radiansToDegress(document.calc.display.value)
else
document.calc.display.value=degressToRadians(document.calc.display.value)
endNumber=true
}
functioninputshift()
{
if(document.calc.shiftf.checked)
{
document.calc.bt.value="deg"
document.calc.ln.value="exp"
document.calc.log.value="expd"
if(document.calc.hypf.checked)
{
document.calc.sin.value="ahs"
document.calc.cos.value="ahc"
document.calc.tan.value="aht"
}
else
{
document.calc.sin.value="asin"
document.calc.cos.value="acos"
document.calc.tan.value="atan"
}
document.calc.sqr.value="x^.5"
document.calc.cube.value="x^.3"
document.calc.floor.value="小数"
}
else
{
document.calc.bt.value="d.ms"
document.calc.ln.value="ln"
document.calc.log.value="log"
if(document.calc.hypf.checked)
{
document.calc.sin.value="hsin"
document.calc.cos.value="hcos"
document.calc.tan.value="htan"
}
else
{
document.calc.sin.value="sin"
document.calc.cos.value="cos"
document.calc.tan.value="tan"
}
document.calc.sqr.value="x^2"
document.calc.cube.value="x^3"
document.calc.floor.value="取整"
}
}
//存储器部分
functionclearmemory()
{
mem=0
document.calc.memory.value=""
}
functiongetmemory()
{
endNumber=true
document.calc.display.value=decto(mem,carry)
}
functionputmemory()
{
endNumber=true
if(document.calc.display.value!
=0)
{
mem=todec(document.calc.display.value,carry)
document.calc.memory.value="M"
}
else
document.calc.memory.value=""
}
functionaddmemory()
{
endNumber=true
mem=parseFloat(mem)+parseFloat(todec(document.calc.display.value,carry))
if(mem==0)
document.calc.memory.value=""
else
document.calc.memory.value="M"
}
functionmultimemory()
{
endNumber=true
mem=parseFloat(mem)*parseFloat(todec(document.calc.display.value,carry))
if(mem==0)
document.calc.memory.value=""
else
document.calc.memory.value="M"
}
//十进制转换
functiontodec(num,oldcarry)
{
if(oldcarry==10||num==0)return(num)
varneg=(num.charAt(0)=="-")
if(neg)num=num.substr
(1)
varnewnum=0
for(varindex=1;index<=num.length;index++)
newnum=newnum*oldcarry+hexnum.indexOf(num.charAt(index-1))
if(neg)
newnum=-newnum
return(newnum)
}
functiondecto(num,newcarry)
{
varneg=(num<0)
if(newcarry==10||num==0)return(num)
num=""+Math.abs(num)
varnewnum=""
while(num!
=0)
{
newnum=hexnum.charAt(num%newcarry)+newnum
num=Math.floor(num/newcarry)
}
if(neg)
newnum="-"+newnum
return(newnum)
}
//表达式解析
functionparse(string)
{
if(string.match(/^(.*\d[\+\-\*\/\%\^\&\|x\<])?
([+-]?
[0-9a-f\.]+)([\+\-\*\/\%\^\&\|x\<])([+-]?
[0-9a-f\.]+)$/))
return(RegExp.$1+cypher(RegExp.$2,RegExp.$3,RegExp.$4))
else
return(string)
}
//数学运算和位运算
functioncypher(left,join,righ