(已更新,见红字)
由于上班太无聊,某人看我闲的慌让我用JS写一个网页计算器。
反正闲着也是闲着,就写了下。
以下是源码,欢迎搜索到的人测试使用并告诉我BUG,我会修改。
说明:简单的计算器,尚未添加小数点的输入(预计明后天添加完成)
保存以下代码到文本文档,改后缀名txt为HTML即可使用,也可插入博客。
-----------------------------------------------不要复制虚线--------------------------------------
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language=javascript>
var temp1=0;
var temp2=0;
var cond="";
var i=0;
var flag=0;
var aflag=0;
var sflag=0;
var last=0;
function addval(aa)
{
if(flag==1){
document.form1.target.value="";
}
if(document.form1.target.value==0&&aa==0){
document.form1.target.value=aa;
}else if(document.form1.target.value==0&&aa!=0){
document.form1.target.value=aa;
}else{
document.form1.target.value=document.form1.target.value+aa;
}
flag=0;
aflag=0;
sflag=0;
}
function add(bb)
{
if(aflag!=1){
if(i!=0){
flag=1;
if(cond==" + "){
temp1=parseFloat(temp1)+parseFloat(document.form1.target.value);
}
if(cond==" - "){
temp1=parseFloat(temp1)-parseFloat(document.form1.target.value);
}
if(cond==" x "){
temp1=parseFloat(temp1)*parseFloat(document.form1.target.value);
}
if(cond==" / "){
temp1=parseFloat(temp1)/parseFloat(document.form1.target.value);
}
cond=bb;
}
if(i==0){
flag=1;
temp1=parseFloat(document.form1.target.value);
cond=bb;
}
}else{
flag=1;
cond=bb;
}
i=i+1;
aflag=1;
sflag=0;
}
function sum()
{
if(sflag!=0){
temp2=last;
}else{
temp2=document.form1.target.value;
last=document.form1.target.value;
}
if(cond==" + "){
document.form1.target.value=parseFloat(temp1)+parseFloat(temp2);
temp1=parseFloat(temp1)+parseFloat(temp2);
}
if(cond==" - "){
document.form1.target.value=parseFloat(temp1)-parseFloat(temp2);
temp1=parseFloat(temp1)-parseFloat(temp2);
}
if(cond==" x "){
document.form1.target.value=parseFloat(temp1)*parseFloat(temp2);
temp1=parseFloat(temp1)*parseFloat(document.form1.target.value);
}
if(cond==" / "){
document.form1.target.value=parseFloat(temp1)/parseFloat(temp2);
temp1=parseFloat(temp1)/parseFloat(document.form1.target.value);
}
i=0;
flag=1;
sflag=sflag+1;
}
function cle()
{
document.form1.target.value=0;
temp1=0;
temp2=0;
i=0;
}
</script>
</HEAD>
<BODY>
<form name="form1" method="post" action="">
<TABLE>
<TR>
<TD colspan="4"><input type="text" name="target" value="0"></TD>
<TD></TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TD><input type="button" value=1 onclick=addval(this.value)></TD>
<TD><input type="button" value=2 onclick=addval(this.value)></TD>
<TD><input type="button" value=3 onclick=addval(this.value)></TD>
<TD><input type="button" value=" + " name="_do" onclick=add(this.value)></TD>
</TR>
<TR>
<TD><input type="button" value=4 onclick=addval(this.value)></TD>
<TD><input type="button" value=5 onclick=addval(this.value)></TD>
<TD><input type="button" value=6 onclick=addval(this.value)></TD>
<TD><input type="button" value=" - " name="_do" onclick=add(this.value)></TD>
</TR>
<TR>
<TD><input type="button" value=7 onclick=addval(this.value)></TD>
<TD><input type="button" value=8 onclick=addval(this.value)></TD>
<TD><input type="button" value=9 onclick=addval(this.value)></TD>
<TD><input type="button" value=" x " name="_do" onclick=add(this.value)></TD>
</TR>
<TR>
<TD><input type="button" value=" c " onclick=cle()></TD>
<TD><input type="button" value=0 onclick=addval(this.value)></TD>
<TD><input type="button" value=" = " onclick=sum()></TD>
<TD><input type="button" value=" / " name="_do" onclick=add(this.value)></TD>
</TR>
</TABLE>
</form>
</BODY>
</HTML>
--------------------------------------------------不要复制虚线-----------------------------------------------
有好的意见或者建议可以提出,只要在能力范围内就会改进。
明天去公司完成那小数点功能,貌似增加这个功能代码复杂度会上升好多。
以下为添加小数点输入功能的新版本。
说明:今天添加小数点功能时感觉并不是很难,考虑些异常情况
增加字符转换浮点的功能就可以了。但是JS中处理FLOAT
时有个精度的BUG,我已经处理了一下,但是在某些情况
下还是会出现细微的精度误差,大家谅解。
性能不足:当你输入8 X (-1) = 时,计算结果将会是7。这是因为
没能处理乘号和除号之后的负数,因为之前写的方法
是当连续输入符号时,后一个运算符将覆盖前一个。
今天尝试了2小时没解决,暂时先告一段落。
最后: 除去以上指出的BUG外,欢迎使用后告诉我那些我没测试
出来的BUG,谢谢。
(希望高手可以来完善其他功能)
----------------------------------------我是分割线 不要复制--------------------------------------------
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<script language=javascript>
var temp1=0;
var temp2=0;
var cond="";
var i=0;
var flag=0;
var aflag=0;
var sflag=0;
var last=0;
var dflag=0;
function addval(aa)
{
if(aa=="."){
dflag=dflag+1;
}
if(flag==1){
document.form1.target.value="";
}
if(document.form1.target.value==0&&aa==0&&dflag==0){
document.form1.target.value=aa;
}
else if(document.form1.target.value==0&&aa=="."&&dflag==1){
document.form1.target.value=document.form1.target.value+aa;
}
//else if(document.form1.target.value==0&&dflag==0&&aa!=0){
// document.form1.target.value=0;
//}
else if(dflag!=1&&dflag!=0&&aa=="."){
document.form1.target.value=document.form1.target.value;
}else if(document.form1.target.value==0&&aa!=0&&aa!="."&&dflag==0){
document.form1.target.value=aa;
}else{
document.form1.target.value=document.form1.target.value+aa;
}
flag=0;
aflag=0;
sflag=0;
}
function add(bb)
{
if(document.form1.target.value=="0."){
document.form1.target.value="0"
}
if(aflag!=1){
if(i!=0){
flag=1;
if(cond==" + "){
temp1=parseFloat(temp1)+parseFloat(document.form1.target.value);
temp1.toFixed(2);
}
if(cond==" - "){
temp1=parseFloat(temp1)-parseFloat(document.form1.target.value);
temp1.toFixed(2);
}
if(cond==" x "){
temp1=parseFloat(temp1)*parseFloat(document.form1.target.value);
temp1.toFixed(2);
}
if(cond==" / "){
temp1=parseFloat(temp1)/parseFloat(document.form1.target.value);
temp1.toFixed(2);
}
cond=bb;
}
if(i==0){
flag=1;
temp1=parseFloat(document.form1.target.value);
cond=bb;
}
}else{
flag=1;
cond=bb;
}
i=i+1;
aflag=1;
sflag=0;
dflag=0;
}
function sum()
{
if(sflag!=0){
temp2=last;
}else{
temp2=document.form1.target.value;
last=document.form1.target.value;
}
if(cond==" + "){
document.form1.target.value=parseFloat(temp1)+parseFloat(temp2);
temp1=parseFloat(temp1)+parseFloat(temp2);
}
if(cond==" - "){
document.form1.target.value=parseFloat(temp1)-parseFloat(temp2);
temp1=parseFloat(temp1)-parseFloat(temp2);
}
if(cond==" x "){
document.form1.target.value=parseFloat(temp1)*parseFloat(temp2);
temp1=parseFloat(temp1)*parseFloat(document.form1.target.value);
}
if(cond==" / "){
document.form1.target.value=parseFloat(temp1)/parseFloat(temp2);
temp1=parseFloat(temp1)/parseFloat(document.form1.target.value);
}
i=0;
flag=1;
sflag=sflag+1;
}
function cle()
{
document.form1.target.value=0;
temp1=0;
temp2=0;
i=0;
dflag=0;
}
</script>
</HEAD>
<BODY>
<form name="form1" method="post" action="">
<TABLE>
<TR>
<TD colspan="4"><input type="text" name="target" value="0"></TD>
<TD></TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TD><input type="button" value=1 onclick=addval(this.value)></TD>
<TD><input type="button" value=2 onclick=addval(this.value)></TD>
<TD><input type="button" value=3 onclick=addval(this.value)></TD>
<TD><input type="button" value=" + " name="_do" onclick=add(this.value)></TD>
</TR>
<TR>
<TD><input type="button" value=4 onclick=addval(this.value)></TD>
<TD><input type="button" value=5 onclick=addval(this.value)></TD>
<TD><input type="button" value=6 onclick=addval(this.value)></TD>
<TD><input type="button" value=" - " name="_do" onclick=add(this.value)></TD>
</TR>
<TR>
<TD><input type="button" value=7 onclick=addval(this.value)></TD>
<TD><input type="button" value=8 onclick=addval(this.value)></TD>
<TD><input type="button" value=9 onclick=addval(this.value)></TD>
<TD><input type="button" value=" x " name="_do" onclick=add(this.value)></TD>
</TR>
<TR>
<TD><input type="button" value=" c " onclick=cle()></TD>
<TD><input type="button" value=0 onclick=addval(this.value)></TD>
<TD><input type="button" value="." onclick=addval(this.value)></TD>
<TD><input type="button" value=" / " name="_do" onclick=add(this.value)></TD>
</TR>
<TR>
<TD></TD>
<TD></TD>
<TD></TD>
<TD><input type="button" value=" = " onclick=sum()></TD>
</TR>
</TABLE>
</form>
</BODY>
</HTML>
----------------------------------------我是分割线 不要复制--------------------------------------------


