用javascript编写计算器

JavaScript06

用javascript编写计算器,第1张

用javascript编写计算器:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html charset=utf-8" />

<title>Javascript实现计算器</title>

<style type="text/css">

input{

width:30px

height:20px

text-align:center

}

#tbCalculator td

{

text-align:center

vertical-align:middle

}

</style>

<script type="text/javascript">

var result //保存点击运算符之前输入框中的数值

var operator //保存运算符

var isPressEqualsKey = false //记录是否按下”=“键

//数字键事件

function connectionDigital(control)

{

var txt = document.getElementById('txtScream')

if(isPressEqualsKey)

txt.value = "" //已进行过计算,则清空数值输入框重新开始

isPressEqualsKey = false

}

//数值输入已经存在小数点,则不允许再输入小数点

if(txt.value.indexOf('.') > -1 && control.value == '.')

return false

txt.value += control.value //将控件值赋给数值输入框中

}

//退格键事件

function backspace()

{

var txt = document.getElementById('txtScream')

txt.value = txt.value.substring(0,txt.value.length - 1)

}

//ce键事件:清空数字输入框

function clearAll()

{

document.getElementById('txtScream').value = ""

result = ""

operator = ""

}

// +、-、*、/ 事件

function calculation(control)

{

//将运算符保存入全局变量中

operator = control.value 

var txt = document.getElementById('txtScream')

if(txt.value == "")return false //数值输入框中没有数字,则不能输入运算符

//将数值输入框中的值保存到计算表达式中

result = txt.value 

//清空输入框,以待输入操作值

txt.value = "" 

}

//计算结果

function getResult()

{

var opValue

//计算表达式中存在运算符

var sourseValue = parseFloat(result)

var txt = document.getElementById('txtScream')

if(operator == '*')

opValue = sourseValue * parseFloat(txt.value)

else if(operator == '/')

opValue = sourseValue / parseFloat(txt.value)

else if(operator == '+')

opValue = sourseValue + parseFloat(txt.value)

else if(operator == '-')

opValue = sourseValue - parseFloat(txt.value)

txt.value = opValue

isPressEqualsKey = true

result = ""

opValue = ""

}

</script>

</head>

<body>

<table id="tbCalculator" width="200" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#0066FF">

<tr>

<td height="30" colspan="4" align="center">

<input type="text" name="txtScream" id="txtScream" style="width:180px border-style:none text-align:right" readonly="readonly" /> </td>

</tr>

<tr>

<td height="30" colspan="2">

<input type="button" name="btnCE" id="btnCE" value="C&nbspE" style="width:80px" align="right" onclick="clearAll()" /></td>

<td height="30" colspan="2">

<input type="button" name="btn10" id="btn10" value="Backspace" style="width:80px" align="right" onclick="backspace()" /></td>

</tr>

<tr>

<td height="30"><input type="button" name="btn7" id="btn7" value="7" onclick="connectionDigital(this)" /></td>

<td><input type="button" name="btn8" id="btn8" value="8" onclick="connectionDigital(this)"/></td>

<td><input type="button" name="btn9" id="btn9" value="9" onclick="connectionDigital(this)" /></td>

<td><input type="button" name="btn6" id="btn6" value="/" onclick="calculation(this)" /></td>

</tr>

<tr>

<td height="30">

<input type="button" name="btn4" id="btn4" value="4" onclick="connectionDigital(this)"/></td>

<td><input type="button" name="btn5" id="btn5" value="5" onclick="connectionDigital(this)"/></td>

<td><input type="button" name="btn6" id="btn6" value="6" onclick="connectionDigital(this)"/></td>

<td><input type="button" name="btn13" id="btn13" value="*" onclick="calculation(this)" /></td>

</tr>

<tr>

<td height="30">

<input type="button" name="btn1" id="btn1" value="1" onclick="connectionDigital(this)"/></td>

<td><input type="button" name="btn2" id="btn2" value="2" onclick="connectionDigital(this)"/></td>

<td><input type="button" name="btn3" id="btn3" value="3" onclick="connectionDigital(this)"/></td>

<td><input type="button" name="btn18" id="btn18" value="-" onclick="calculation(this)" /></td>

</tr>

<tr>

<td height="30"><input type="button" name="btn0" id="btn0" value="0" onclick="connectionDigital(this)"/></td>

<td><input type="button" name="btndot" id="btndot" value="." onclick="connectionDigital(this)" /></td>

<td><input name="btn22" type="button" id="btn22" value="=" onclick="getResult()" /></td>

<td><input type="button" name="btn23" id="btn23" value="+" onclick="calculation(this)" /></td>

</tr>

</table>

</body>

</html>

是点击0-9然后点击加减乘除吗?

原理:获取第一个值 获取 运算符 获取第二个值 直接用js相应的运算符计算出值 然后显示到相应位置,如果再次点击运算符 则把此结果当做第一个值 重复前面的程序。如果是点击的数字 则把第一个值重新赋值 执行前面的程序

按键盘的话?

原理:需要正则匹配。。

我刚学javaScript做一计算器,请看看!多多交流!~~``

<html>

<head>

<title>计算器</title>

</head>

<body bgcolor="#33FF99" onload="FKeyPad.ReadOut.focus()FKeyPad.ReadOut.select()">

<FORM name="Keypad" action="">

<TABLE align="center">

<B>

<TABLE align="center" border=3 width=60 height=80 cellpadding=2 cellspacing=5 borderlight="#008080">

<tr align="center">

<td bordercolor="#FF33CC" bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933" colspan=10 align=center>网页计算器</td>

</tr>

<tr align="center">

<td bordercolor="#FF33CC" bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933" colspan=10 align=right><input name="ReadOut" type="Text" onkeypress="CheckOut()" size=40 value="0"

width=100%></td>

</tr>

<tr align="center">

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnsin" type="Button" value=" sin " onclick="useFun ('sin')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btncos" type="Button" value=" cos " onclick="useFun ('cos')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnOne" type="Button" value=" 1 " onclick="NumPressed(1)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnTwo" type="Button" value=" 2 " onclick="NumPressed(2)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnThree" type="Button" value=" 3 " onclick="NumPressed(3)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnPlus" type="Button" value=" + " onclick="Operation('+')"></td>

</tr>

<tr align="center">

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnasin" type="Button" value=" asin " onclick="useFun ('asin')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnacos" type="Button" value=" acos " onclick="useFun ('acos')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnFour" type="Button" value=" 4 " onclick="NumPressed(4)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnFive" type="Button" value=" 5 " onclick="NumPressed(5)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnSix" type="Button" value=" 6 " onclick="NumPressed(6)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnMinus" type="Button" value=" - " onclick="Operation('-')"></td>

</tr>

<tr align="center">

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btntan" type="Button" value=" tan " onclick="useFun ('tan')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnatan" type="Button" value=" atan " onclick="useFun ('atan')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnSeven" type="Button" value=" 7 " onclick="NumPressed(7)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnEight" type="Button" value=" 8 " onclick="NumPressed(8)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnNine" type="Button" value=" 9 " onclick="NumPressed(9)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnMultiply" type="Button" value=" * " onclick="Operation('*')"></td>

</tr>

<tr align="center">

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnlog" type="Button" value=" log " onclick="useFun ('log')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnexp" type="Button" value=" exp " onclick="useFun ('exp')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnZero" type="Button" value=" 0 " onclick="NumPressed(0)"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnDecimal" type="Button" value=" . " onclick="Decimal()"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnNeg" type="Button" value=" +/- " onclick="Neg()"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnDivide" type="Button" value=" / " onclick="Operation('/')"></td>

</tr>

<tr align="center">

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnsqrt" type="Button" value=" sqrt " onclick="useFun ('sqrt')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnOx" type="Button" value=" 1/x " onclick="useFun ('1/x')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnXt" type="Button" value=" x^2 " onclick="useFun ('x^2')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnXthr" type="Button" value=" x^3 " onclick="useFun ('x^3')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnpi" type="Button" value=" pi " onclick=FKeyPad.ReadOut.value=Math.PI></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnEquals" type="Button" value=" = " onclick="Operation('=')"></td>

</tr>

<tr align="center">

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnDivide" type="Button" value=" N! " onclick="ni ()"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnDivide" type="Button" value=" pow " onclick="Operation('pow')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnDivide" type="Button" value=" E " onclick=FKeyPad.ReadOut.value=Math.E></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnClear" type="Button" value=" C " onclick="Clear()"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnClearEntry" type="Button" value=" CE " onclick="ClearEntry()"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnReturn" type="Button" value="返 回" onclick="goReturn()"></td>

</tr>

<tr align="center">

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnmod" type="Button" value=" MOD " onclick="Operation('MOD')"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnDivide" type="Button" value=" INT" onclick=FKeyPad.ReadOut.value=parseInt(FKeyPad.ReadOut.value,10)></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnmod" type="Button" value=" HEX " onclick="hexchange ()"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnmod" type="Button" value=" OCT " onclick="octchange ()"></td>

<td bordercolordark="#cc0066" bordercolor="#FF9966" bordercolorlight="#CC9933"><input name="btnmod" type="Button" value=" BIN " onclick="binchange ()"></td>

</tr>

</TABLE>

</TABLE>

</B>

</FORM>

</CENTER>

<font face="Verdana, Arial, Helvetica" size=2>

<SCRIPT LANGUAGE="JavaScript">

<!-- Begin

var FKeyPad = document.forms['Keypad']

var Accum = "0"

var FlagNewNum = false

var PendingOp = ""

function longCount(str1,str2,type)

{

var comma1 = 0

if (str1.indexOf(".")!=-1)

{

str1 = str1.replace(/0*$/,"")

comma1 = str1.length - str1.indexOf(".")-1

}

var comma2 = 0

if (str2.indexOf(".")!=-1)

{

str2 = str2.replace(/0*$/,"")

comma2 = str2.length - str2.indexOf(".")-1

}

str1 = str1.replace(/\./,"")

str2 = str2.replace(/\./,"")

var value,comma

if (type!="*")

{

if (comma1>comma2)

{

for (var i=0i<comma1-comma2i++) str2 += "0"

comma = (type=="/")?0:comma1

}else

{

for (var i=0i<comma2-comma1i++) str1 += "0"

comma = (type=="/")?0:comma2

}

}else

{

comma = comma1 + comma2

}

if (type=="+")

{

value = parseInt(str1,10) + parseInt(str2,10)

}else if (type=="-")

{

value = parseInt(str1,10) - parseInt(str2,10)

}else if (type=="*")

{

value = parseInt(str1,10) * parseInt(str2,10)

}else if (type=="/")

{

value = parseInt(str1,10) / parseInt(str2,10)

}

else if (type=="MOD")

value = parseInt(str1,10) % parseInt(str2,10)

else if (type=="pow")

{

var a,b,s=1

a=parseInt(str1,10)

b=parseInt(str2,10)

for(var i=1i<=bi++)

s=s*a

value=parseInt(s,10)

}

value = String(value)

if (comma>0) value = value.substring(0,value.length-comma)+"."+value.substring(value.length- comma,value.length)

if (value.indexOf(".")!=-1)

value = value.replace(/0*$/,"")

return value

}

function NumPressed (Num) {

if (FlagNewNum)

{

FKeyPad.ReadOut.value = Num

FlagNewNum = false

}

else

{

if (FKeyPad.ReadOut.value == "0")

FKeyPad.ReadOut.value = Num

else

FKeyPad.ReadOut.value += Num

}

}

function Operation (Op)

{

var Readout = FKeyPad.ReadOut.value

if (FlagNewNum &&PendingOp != "=")

else

{

FlagNewNum = true

if ( '+' == PendingOp || '-' == PendingOp || '/' == PendingOp || '*' == PendingOp||'MOD'==PendingOp||'pow'==PendingOp)

Accum = longCount(Accum,Readout,PendingOp)

else

Accum = Readout

FKeyPad.ReadOut.value = Accum

PendingOp = Op

FKeyPad.ReadOut.focus()

FKeyPad.ReadOut.select()

}

}

function useFun (st)

{

switch(st)

{

case "sin":

FKeyPad.ReadOut.value=Math.sin(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "cos":

FKeyPad.ReadOut.value=Math.cos(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "asin":

FKeyPad.ReadOut.value=Math.asin(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "acos":

FKeyPad.ReadOut.value=Math.acos(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "tan":

FKeyPad.ReadOut.value=Math.tan(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "atan":

FKeyPad.ReadOut.value=Math.atan(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "log":

FKeyPad.ReadOut.value=Math.log(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "exp":

FKeyPad.ReadOut.value=Math.exp(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "sqrt":

FKeyPad.ReadOut.value=Math.sqrt(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "1/x":

FKeyPad.ReadOut.value=1/FKeyPad.ReadOut.value

FlagNewNum=true

break

case "x^2":

FKeyPad.ReadOut.value=parseFloat(FKeyPad.ReadOut.value)*parseFloat(FKeyPad.ReadOut.value)

FlagNewNum=true

break

case "x^3":

FKeyPad.ReadOut.value=parseFloat(FKeyPad.ReadOut.value)*parseFloat(FKeyPad.ReadOut.value)*parseFloat(FKeyPad.ReadOut.value)

FlagNewNum=true

break

}

}

function hexchange ()

{

var hex,dec

dec = parseFloat(FKeyPad.ReadOut.value)

hex = dec.toString(16)

window.alert("该十进制数转成十六进制数为:"+ hex)

}

function octchange ()

{

var oct,dec

dec = parseFloat(FKeyPad.ReadOut.value)

oct = dec.toString(8)

window.alert("该十进制数转成八进制数为:"+ oct)

}

function binchange ()

{

var bin,dec

dec = parseFloat(FKeyPad.ReadOut.value)

bin = dec.toString(2)

window.alert("该十进制数转成二进制数为:"+ bin)

}

function ni ()

{var y,k=1

y=parseFloat(FKeyPad.ReadOut.value)

for(var x=1x<=yx++)

k=k*x

FKeyPad.ReadOut.value=k

}

function Decimal ()

{

var curReadOut = FKeyPad.ReadOut.value

if (FlagNewNum)

{

curReadOut = "0."

FlagNewNum = false

}

else

{

if (curReadOut.indexOf(".") == -1)

curReadOut += "."

}

FKeyPad.ReadOut.value = curReadOut

}

function ClearEntry ()

{

FKeyPad.ReadOut.value = "0"

FlagNewNum = true

}

function Clear ()

{

Accum = "0"

PendingOp = ""

ClearEntry()

}

function Neg ()

{

window.alert(FKeyPad.ReadOut.value)

FKeyPad.ReadOut.value = longCount(FKeyPad.ReadOut.value,"-1","*")

}

function goReturn()

{

top.returnValue = FKeyPad.ReadOut.value

self.close()

}

function CheckOut()

{

var keyCode = window.event.keyCode

if (keyCode>=48 &&keyCode<=57)

{

if (FlagNewNum)

{

FKeyPad.ReadOut.value = ""

FlagNewNum = false

}

return true

}else if (keyCode==43 || keyCode==45 || keyCode==42 || keyCode==47 || keyCode==61) {

Operation(String.fromCharCode(keyCode))

}else if (keyCode==46) {

if (FKeyPad.ReadOut.value.indexOf(".") == -1)

return true

}else if (keyCode==27) goReturn()

window.event.returnValue = false

return false

}

// End -->

</SCRIPT>

</body>

</html>