用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>