CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

给那位要做计算器的兄弟

楼主JK_10000(JK)2002-04-14 21:00:26 在 Web 开发 / JavaScript 提问

<html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <meta   name="GENERATOR"   content="Microsoft   FrontPage   4.0">  
  <meta   name="ProgId"   content="FrontPage.Editor.Document">  
  <title>New   Page   1</title>  
  </head>  
   
  <body>  
  <form   name=frm   onsubmit="return   jisuan()">  
  算式:<input   name="suanshi"   size=80   >  
  <input   type=submit   value="开始计算"   ><br>  
  结果:<input   name="jieguo"   size=80>  
  </form>  
  <script   language=javascript>  
  function   jisuan()  
  {  
  try {  
  eval("frm.jieguo.value="+frm.suanshi.value);  
  frm.suanshi.value="("+frm.suanshi.value+")";  
  frm.suanshi.focus();  
    }  
  catch(exception){alert("算式有误");}  
  return   false;  
  }  
  </script>  
   
  </body>  
   
  </html> 问题点数:20、回复次数:22Top

1 楼weidegong(weidegong)回复于 2002-04-14 21:23:12 得分 10

还是参考一下这个吧:  
  <html>  
   
  <head>  
  <meta   http-equiv="Content-Type"  
  content="text/html;   charset=gb_2312-80">  
  <meta   name="GENERATOR"   content="Microsoft   FrontPage   Express   2.0">  
  <title>JAVA计算器</title>  
  <style   type="text/css">  
  <!--  
  td   {     font:   9pt   "宋体";   color:   #FFFFFF}  
  .Button   {     font:   9pt   "宋体";   color:   #FFFFFF;   background:   #brown;   margin:   4px   4px;   width:   40px;   height:   20px;   border-color:   #CCCCCC   #333333   #333333   #CCCCCC;   border-top-width:   2px;   border-right-width:   2px;   border-bottom-width:   2px;   border-left-width:   2px}  
  .text_input   {     font:   9pt   "Verdana",   "Arial",   "Helvetica",   "sans-serif";   color:   #000000;   background:   #CCCCCC;   text-align:   right}  
  a   {     font:   9pt   "宋体";   color:   #FFFFFF}  
  -->  
  </style>  
  </head>  
   
  <body   bgcolor="#CCCC99"   topmargin="0"   leftmargin="1"  
  marginwidth="1"   marginheight="1">  
  <form   name="Keypad">  
      <div   align="center">  
          <center>  
              <br>  
              <table   border="1"   cellpadding="0"  
          cellspacing="1"   width="249"   bgcolor="#B5B56A"  
          bordercolor="#D0CC98"   height="60">  
                  <tr>  
                          <td   align="middle"   colspan="4"><input   type="text"  
                          size="25"   name="ReadOut"   value="0"   width="100%"  
                          class="text_input"></td>  
                          <td   width="0"><input   type="button"   name="btnClear"  
                          value="     C     "   onclick="Clear()"   class="Button"></td>  
                          <td   width="50"><input   type="button"  
                          name="btnClearEntry2"   value="   CE   "  
                          onclick="ClearEntry()"   class="Button"></td>  
                  </tr>  
                  <tr>  
                          <td   align="center"   width="50"><input   type="button"  
                          name="btnSeven"   value="     7     "   onclick="NumPressed(7)"  
                          class="Button"></td>  
                          <td   align="center"   width="50"><input   type="button"  
                          name="btnEight"   value="     8     "   onclick="NumPressed(8)"  
                          class="Button"></td>  
                          <td   align="center"   width="50"><input   type="button"  
                          name="btnNine"   value="     9     "   onclick="NumPressed(9)"  
                          class="Button"></td>  
                          <th   width="50"><p   align="left"><input   type="button"  
                          name="btnHex"   value="HEX"   onclick="hexchange()"  
                          class="Button"></p>  
                          </th>  
                          <td   align="center"   width="0"><input   type="button"  
                          name="btnClearEntry222"   value="OCT"  
                          onclick="octchange()"   class="Button"></td>  
                          <td   align="center"   width="50"><input   type="button"  
                          name="btnClearEntry223"   value="BIN"  
                          onclick="binchange()"   class="Button"></td>  
                  </tr>  
                  <tr>  
                          <td   width="50"><input   type="button"   name="btnFour"  
                          value="     4     "   onclick="NumPressed(4)"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnFive"  
                          value="     5     "   onclick="NumPressed(5)"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnSix"  
                          value="     6     "   onclick="NumPressed(6)"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnPlus"  
                          value="     +     "   onclick="Operation('+')"   class="Button"></td>  
                          <td   width="0"><input   type="button"   name="btnNeg"  
                          value="   +/-   "   onclick="Neg()"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnPercent"  
                          value="   %   "   onclick="Percent()"   class="Button"></td>  
                  </tr>  
                  <tr>  
                          <td   width="50"><input   type="button"   name="btnOne"  
                          value="     1     "   onclick="NumPressed(1)"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnTwo"  
                          value="     2     "   onclick="NumPressed(2)"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnThree"  
                          value="     3     "   onclick="NumPressed(3)"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnMinus"  
                          value="     -       "   onclick="Operation('-')"  
                          class="Button"></td>  
                          <td   width="0"><input   type="button"   name="btnMultiply"  
                          value="     *     "   onclick="Operation('*')"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnDivide"  
                          value="     /       "   onclick="Operation('/')"  
                          class="Button"></td>  
                  </tr>  
                  <tr>  
                          <td   width="50"><input   type="button"   name="btnZero"  
                          value="     0     "   onclick="NumPressed(0)"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnDecimal"  
                          value="       .     "   onclick="Decimal()"   class="Button"></td>  
                          <td   width="50"><input   type="button"   name="btnEquals"  
                          value="     =     "   onclick="Operation('=')"   class="Button"></td>  
                          <td   width="50"> </td>  
                          <td   width="0"> </td>  
                          <td   width="50"> </td>  
                  </tr>  
          </table>  
          </center></div>  
  </form>  
  <script   language="JavaScript">  
  var   FKeyPad   =   document.Keypad;  
  var   Accum   =   0;  
  var   FlagNewNum   =   false;  
  var   PendingOp   =   "";  
  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   )  
  Accum   +=   parseFloat(Readout);  
  else   if   (   '-'   ==   PendingOp   )  
  Accum   -=   parseFloat(Readout);  
  else   if   (   '/'   ==   PendingOp   )  
  Accum   /=   parseFloat(Readout);  
  else   if   (   '*'   ==   PendingOp   )  
  Accum   *=   parseFloat(Readout);  
  else  
  Accum   =   parseFloat(Readout);  
  FKeyPad.ReadOut.value   =   Accum;  
  PendingOp   =   Op;  
        }  
  }  
  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   ()   {  
  FKeyPad.ReadOut.value   =   parseFloat(FKeyPad.ReadOut.value)   *   -1;  
  }  
  function   Percent   ()   {  
  FKeyPad.ReadOut.value   =   (parseFloat(FKeyPad.ReadOut.value)   /   100)   *   parseFloat(Accum);  
  }  
  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);  
  }  
  </script>  
  </body>  
  </html>Top

2 楼JK_10000(JK)回复于 2002-04-14 21:41:22 得分 0

weidegong(weidegong)   :  
   
  你的程式结果界面十分美观,尽管不能做连续运算,但是也算是能完成一般人的要求,并且操作可以只按鼠标。  
  不过我想,他最大的长处是程式长,如果卖的话,可以卖个好价钱  
   
  我的程式注重实用,只适合有一点数学基础的人,可以做连续运算,可以做大数运算  
  当然,我的程式的最大缺点就是太短,如果卖给别人的话,别人肯定是不会要的  
   
   
  呵呵  
  呜呼  
  Top

3 楼weidegong(weidegong)回复于 2002-04-14 21:55:07 得分 0

JK_10000(JK1)   :  
   
  1.界面不够友好。  
  2.功能也非常有限,出了加减乘除,还支持什么操作?  
  3.如果学过编译原理,试着把包含sin/cos/乘方/开方等表达式进行解析,那会是个卖点。就现在使用一个eval,摆明了欺负外行人吗Top

4 楼JK_10000(JK)回复于 2002-04-14 22:03:34 得分 0

只要稍稍改一下,就可以:  
  支持变量运算:  
  支持数学里如三角函数等的运算  
  支持……………  
   
  的确  
  它的核心就是一个eval  
  所以我说我的程式的致命弱点就是短  
  怎么解释  
  别人也会说:就现在使用一个eval,摆明了欺负外行人吗!!!  
  Top

5 楼weidegong(weidegong)回复于 2002-04-14 22:13:45 得分 0

呵呵,你这个算作简单的对javascript的二次开发。卖出去的话,也相当于你提供了一点对于Javascipt的技术支持,如此而已  
   
  只要。。。。,支持。。。  
   
  你做做试试?且让用户易于使用  
   
  Top

6 楼JK_10000(JK)回复于 2002-04-14 23:03:02 得分 0

weidegong(weidegong)   :以下程式支持变最计算:  
  如果再稍稍修改一下,可以让它支持数学里的其它如三角、指数等的运算  
   
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <meta   name="GENERATOR"   content="Microsoft   FrontPage   4.0">  
  <meta   name="ProgId"   content="FrontPage.Editor.Document">  
  <title>算式</title>  
  </head>  
  <body>  
  <form   name=frm   onsubmit="return   jisuan()">  
  变量:   <input   name="bianliang"   size=40   >输入变量请在不同的变最之间用<font   color=red>,</font>隔开,如<font   color=red>a=1,b=2</font><br>  
  算式:<input   name="suanshi"   size=40   ><input   type=submit   value="开始计算"   ><br>  
  结果:<input   name="jieguo"   size=40><br>  
  </form>  
  <script   language=javascript>  
  function   jisuan()  
  {  
  try {  
  eval("var   "+frm.bianliang.value+";");  
  eval("frm.jieguo.value="+frm.suanshi.value);  
  frm.suanshi.value="("+frm.suanshi.value+")";  
  frm.suanshi.focus();  
    }  
  catch(exception){alert("算式有误");}  
  return   false;  
  }  
  </script>  
  </body>  
  </html>Top

7 楼JK_10000(JK)回复于 2002-04-14 23:10:00 得分 0

以上程式里eval里的"var   "应该为"var   JKhaveatest=1,"Top

8 楼weidegong(weidegong)回复于 2002-04-14 23:28:25 得分 0

以上程式里eval里的"var   "应该为"var   JKhaveatest=1,"  
   
  不若如此:  
  if(frm.bianliang.value.length>0)   eval("var   "+frm.bianliang.value+";");  
   
  Top

9 楼JK_10000(JK)回复于 2002-04-15 08:16:05 得分 0

支持你的修改Top

10 楼weidegong(weidegong)回复于 2002-04-15 19:01:04 得分 0

还应该去掉frm.bianliang.value前后的空格,更好一点Top

11 楼JK_10000(JK)回复于 2002-04-15 19:19:13 得分 0

加一句:frm.bianliang.value=frm.bianliang.value.replace(/\W/g,"");Top

12 楼JK_10000(JK)回复于 2002-04-15 19:31:58 得分 0

以上一句应为:  
  frm.bianliang.value=frm.bianliang.value.replace(/[\W,]/g,"");  
  Top

13 楼JK_10000(JK)回复于 2002-04-15 19:35:12 得分 0

还是错了,我得再去查一查怎么表示除a-zA-Z0-9._,=之外的任意字符怎么表示Top

14 楼weidegong(weidegong)回复于 2002-04-15 20:57:42 得分 0

这样东西就多了Top

15 楼JK_10000(JK)回复于 2002-04-15 22:32:42 得分 0

不多,用正则表达式,一句话而已.Top

16 楼JK_10000(JK)回复于 2002-04-15 22:35:30 得分 0

如果要加上三角、指数等数学运算数  
  用正则表达式也不会多出五行  
  Top

17 楼weidegong(weidegong)回复于 2002-04-16 00:15:59 得分 0

有机会的时候把它做出来,现在已经感觉有些雏形了。  
   
  用计算器最大的不好就是优先级的问题。  
   
  我看有些计算器上提供了()的功能,考虑实现这个功能  
   
  这样用户录入的时候,我们只要记录整个表达式,就可以算出值。  
   
  提供函数支持,用户可以保存一个函数,下次输入变量的值直接给出结果Top

18 楼JK_10000(JK)回复于 2002-04-16 08:26:51 得分 0

我所看到的别人做的计算器几乎都是单输入(输出框)的  
  就是与我们的实际计算器相仿  
  所以功能十分有限  
   
  利用多输入输出框,本计算器已经有了:  
  1.()的功能  
        -----算式输完后敲一下回车就可以看到  
  2.   记录表达式的功能  
        ------记录了表达式,就可以进行回退操作  
        -----一长串的算式输入完后发现某一个数输入错误,可以进行改正,然后重算  
  3.   变量操作  
  4.   函数支持  
  5.   扩展性好  
   
  另外:  
  1.   结果的输入框应为readonly  
  2.   在结果的后面应该加一个按钮,点击后将结果代替算式  
  Top

19 楼weidegong(weidegong)回复于 2002-04-16 09:13:26 得分 0

1.单输入只是为了让人使用起来更加简单。  
  2.输入和输出窗口分离Top

20 楼koolfoo()回复于 2002-04-16 09:38:12 得分 10

去campo.3322.net看一下啊,那里有一个科学计算器,很棒的。  
  Top

21 楼JK_10000(JK)回复于 2002-04-16 10:04:34 得分 0

最开始  
  单输入只是为了节约显示屏。  
  但是,  
  现在却没有这个必要了  
  除非是为了附合人们的老习惯Top

22 楼JK_10000(JK)回复于 2002-04-16 13:49:05 得分 0

koolfoo():去看过,老套Top

相关问题

  • 寻求javascript做的网页计算器。
  • 利用java做一个计算器
  • 如何做像windows计算器的关于对话框。
  • 做一个简单的计算器--UP有分!
  • 谁能提供一个vb6做的计算器代码!!
  • 一个学过编程人常做的---计算器的问题!
  • 有谁可以帮我做一个计算器呀,谢谢
  • 谁有javascrip做的计算器,功能强大一点的。拜托!高分!
  • 调用计算器!!!!
  • cbuilder怎么做计算器啊?我就学过c没学过c++。可以做吗?

关键词

得分解答快速导航

  • 帖主:JK_10000
  • weidegong
  • koolfoo

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo