不用eval代码的话用什么代码运算,%如何加入计算(例:100+20%,结果为100.2),另外CE如何使用(例:100+20,点击CE后删除20,变成100+0)
如何使用html制作计算器?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 一把编程的菜刀 2022-06-22 11:03关注
不用eval的计算器,你说的几点都实现了,处理的匆忙,可能会存在其他的BUG,你自己再调整就好
<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style> .top { width: 465px; height: 60px; margin: auto; background-color: gray; margin-top: 100px; border-top-right-radius: 10px; border-top-left-radius: 10px; } .point-red { width: 20px; height: 20px; background-color: red; float: left; /*浮动,可以让其不独占一行*/ margin-left: 20px; margin-top: 20px; border-radius: 50%;/* 通过这个指令将正方形改为一个圆 */ } .point-blue { width: 20px; height: 20px; background-color: blue; float: left; /*浮动,可以让其不独占一行*/ margin-left: 20px; margin-top: 20px; border-radius: 50%;/* 通过这个指令将正方形改为一个圆 */ } .point-green { width: 20px; height: 20px; background-color: green; float: left; /*浮动,可以让其不独占一行*/ margin-left: 20px; margin-top: 20px; border-radius: 50%;/* 通过这个指令将正方形改为一个圆 */ } #counter { font-size: 25px; color: white; float: right; line-height: 60px; margin-right: 35px; } /* 设置显示结果和计算过程的部分 */ #result { width: 451px; height: 55px; border: 2px solid brown; margin: auto; text-align: right; font-size: 30px; padding-right: 10px; padding-top: 5px; } /* 设置按钮区域的样式 */ .button { width: 465px; height: 413px; background-color: gray; margin: auto; border-bottom-left-radius: 10px; border-bottom-right-radius: 10px; } .button div { width: 110px; height: 80px; float: left; background-color: aquamarine; border: 1px gray solid; margin-left: 3.3px; text-align: center; font-size: 25px; line-height: 80px; font-weight: bold; } /* 使用伪类,可以产生一个鼠标悬停的效果 */ .button div:hover { background-color: bisque; /* 鼠标放在上面有放大的效果 */ font-size: 28px; } </style> </head> <body> <div class="top"> <!-- 这是最上面那个灰色的 --> <div class="point-red"></div> <div class="point-blue"></div> <div class="point-green"></div> <div id="counter">计算器</div> </div> <!-- 显示计算结果和计算过程 --> <div id="result">0</div> <!-- 设置按钮区域 --> <div class="button"> <div onclick="doback1()">CE</div> <!--清空--> <div onclick="doclear()">C</div> <div onclick="clickoperator('%')">%</div> <div onclick="doback()">back</div> <div onclick="clicknumber(1)">1</div> <div onclick="clicknumber(2)">2</div> <div onclick="clicknumber(3)">3</div> <div onclick="clickoperator('+')">+</div> <div onclick="clicknumber(4)">4</div> <div onclick="clicknumber(5)">5</div> <div onclick="clicknumber(6)">6</div> <div onclick="clickoperator('-')">-</div> <div onclick="clicknumber(7)">7</div> <div onclick="clicknumber(8)">8</div> <div onclick="clicknumber(9)">9</div> <div onclick="clickoperator('x')">x</div> <div onclick="clicknumber(0)">0</div> <!-- 双击时,调用countertitle()这个函数 --> <div onclick="clickpoint('.')">.</div> <div onclick="docalc()">=</div> <div onclick="clickoperator('÷')">÷</div> </div> </body> </html> <script type="text/javascript"> //给函数传递参数(number),用于输入哪一个数字 function clicknumber(number){ var result = document.getElementById("result"); var string = result.innerHTML; var len = string.length; var re=/([^\d])(\d)$/g; var last=string.match(re); if(result.innerHTML=='0'){ result.innerHTML=number; } else if(last!=null && last[0].replace(/[^\d]/g,'')==0){// && last[0].replace('/([+]|[-]|[%]|[x]|[÷])/g','')=='0' result.innerHTML=string.substr(0,len-1)+number } else{ result.innerHTML += number; //这里的result是前面那个变量名,给变量名赋值为7 } } // 输入运算符 function clickoperator(operator){ var result = document.getElementById("result"); var string = result.innerHTML; var len = string.length; //用len变量获取string长度 var last = string[len-1]; //last变量是字符串的最后一个字符 if(last == "+" || last =="-" || last == "x" || last == "÷" || last == "."){ //下面的代码是从string的数组下标为0开始往后获取len-1个长度,然后最后一位用新输入的那个运算符代替 var temp = string.substr(0,len-1) + operator; //substr(x,y),x是数组开始的下标,y是往后获取y个 result.innerHTML = temp; } else{ result.innerHTML += operator; //如果不是字符那就正常执行 } } // 计算结果 function docalc(){ var result = document.getElementById("result"); var str = result.innerHTML; str.replace(/[^\d.]*(\d+%)[^\d]*/g,function (match,param,offset,string) { var jg=parseInt(param.replace('%',''))/100 str=str.replace(param,jg) }) patt=/(\d+)(\.\d+)?|([+]|[-]|[%]|[x]|[÷])/g; var new_str=str.match(patt); if(new_str==null){ result.innerHTML =new_str; } else{ var new_r=0; var pre=0; var ysf='+'; var re=/^(\d+)(\.\d+)?$/g; for (var i = 0; i < new_str.length; i++) { if(!re.test(new_str[i])){ ysf=new_str[i]; } else{ pre=new_str[i]; if(ysf=='+'){ new_r=new_r+pre; } else if(ysf=='-'){ new_r=new_r-pre; }else if(ysf=='x'){ new_r=new_r*pre; }else if(ysf=='÷'){ new_r=new_r/pre; }else if(ysf=='%'){ new_r=new_r % pre; } } } result.innerHTML = new_r; } } // 清空 function doclear(){ var result = document.getElementById("result"); result.innerHTML = "0"; //给这个结果赋空值 } // 删除,退格,回退删除最后一个字符 // 要利用数组,在计算器中12345分别的是第01234位 function doback(){ var result = document.getElementById("result"); var len = result.innerHTML.length;//取长度,这个字符串有多少位的长度 // substr(x,y)里面有两个参数,x是从数组的第几位开始,y是往后取多少位。(0,5)意思就是从第一个开始取,一直取五个数字 result.innerHTML = result.innerHTML.substr(0,len-1); } function doback1(){ var result = document.getElementById("result"); var len = result.innerHTML.length;//取长度,这个字符串有多少位的长度 var re=/(\d+)%$/g; var new_str=result.innerHTML.match(re); // substr(x,y)里面有两个参数,x是从数组的第几位开始,y是往后取多少位。(0,5)意思就是从第一个开始取,一直取五个数字 if(new_str==null){ result.innerHTML = result.innerHTML.substr(0,len-1); } else{ result.innerHTML = result.innerHTML.replace(new_str[0],0) } } //获取字符串最后一个字符,如果是一个运算符,你还想输入一个运算法,那就把这个运算符替换了 function getlastchar(){ var result = document.getElementById("result"); var string = result.innerHTML; var len = string.length; var last = string[len-1]; return last } // 这个函数是模仿了运算符来写的 function clickpoint(point){ var result = document.getElementById("result"); var string = result.innerHTML; var len = string.length; var last = string[len-1]; if(last == "."){ last = string.substr(0,len-1) + point; result.innerHTML = last; } else{ result.innerHTML += point; } } </script>
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 乌班图ip地址配置及远程SSH
- ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
- ¥15 PSPICE制作一个加法器
- ¥15 javaweb项目无法正常跳转
- ¥15 VMBox虚拟机无法访问
- ¥15 skd显示找不到头文件
- ¥15 机器视觉中图片中长度与真实长度的关系
- ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
- ¥15 java 的protected权限 ,问题在注释里
- ¥15 这个是哪里有问题啊?