js简易计算器底层运算逻辑(带撤销功能)
2017-08-29 18:53
267 查看
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> *{ padding: 0; margin: 0; } .wrap{ width: 400px; height: 430px; margin: 20px auto; border: 1px solid #000; } input{ width: 396px; height: 26px; text-align: right; } .box{ padding-top: 10px; width: 400px; height: 300px; text-align: center; } button{ width: 25%; height: 30px; cursor: pointer; margin:2px 10px; } </style> </head> <body> <div class="wrap"> <input type="text" name="result" id="result" value="" /> <div class="box"> <button>1</button> <button>2</button> <button>3</button> <button>4</button> <button>5</button> <button>6</button> <button>7</button> <button>8</button> <button>9</button> <button>0</button> <button>+</button> <button>-</button> <button>*</button> <button>/</button> <button>=</button> <button>back</button> </div> </div> </body> <script type="text/javascript"> var buttonList = document.getElementsByTagName('button'); var input = document.getElementById('result'); var dataSource = []; for(var i = 0; i < buttonList.length; i++){ buttonList[i].onclick = function(){ var str = this.innerHTML; if(str == 'back'){ calcBack(); return ; }else if(dataSource[dataSource.length -1] == '='){ dataSource = []; //上一次是=,再点击则清空 } dataSource.push(str); dataSource = handle(dataSource); handReult(dataSource); } } function calcBack(){ var arr = dataSource.join('').split(''); arr.pop(); dataSource = handle(arr); handReult(dataSource); } function show(arr){ var result = arr.join(''); input.value = result; } function handle(newArr){ var temp = []; //处理好的数据 var str = ''; for(var i = 0; i < newArr.length; i++){ var num = Number(newArr[i]); if(num || num === 0){ //一定是数字 str = str+newArr[i]; }else{ //字符串,过滤重复的 + - * / if(str != ''){ temp.push(str); temp.push(newArr[i]); str =''; } } } if(str != ''){ temp.push(str); str = ''; } //去掉前面的0 for(var i = 0 ; i < temp.length; i++){ var num = Number(temp[i]); if(num || num == 0){ temp[i] = Number(temp[i]); } } return temp; } function handReult(temp){ temp = JSON.parse(JSON.stringify(temp)); //判断是否要计算 if(temp[temp.length-1] == '='){ var result = calcu(temp); temp.push(result); } //显示 show(temp); } function calcu(arr){ var newArr = JSON.parse(JSON.stringify(arr)); //复制数组,去掉引用 //计算除法 while(newArr.indexOf('/') != -1){ var index = newArr.indexOf('/'); var num1 = newArr[index-1]; var num2 = newArr[index+1]; var result = num1/num2; newArr.splice(index-1,3,result); } //乘法 while(newArr.indexOf('*') != -1){ var index = newArr.indexOf('*'); var num1 = newArr[index-1]; var num2 = newArr[index+1]; var result = num1*num2; newArr.splice(index-1,3,result); } //减法 while(newArr.indexOf('-') != -1){ var index = newArr.indexOf('-'); var num1 = newArr[index-1]; var num2 = newArr[index+1]; var result = num1-num2; newArr.splice(index-1,3,result); } //加法 while(newArr.indexOf('+') != -1){ var index = newArr.indexOf('+'); var num1 = newArr[index-1]; var num2 = newArr[index+1]; var result = num1+num2; newArr.splice(index-1,3,result); } return newArr[0]; } </script> </html>
相关文章推荐
- Mathcad 是一种工程计算软件,主要运算功能:代数运算、线性代数、微积分、符号计算、2D和3D图表、动画、函数、程序编写、逻辑运算、变量与单位的定义和计算等。
- Mathcad 是一种工程计算软件,主要运算功能:代数运算、线性代数、微积分、符号计算、2D和3D图表、动画、函数、程序编写、逻辑运算、变量与单位的定义和计算等。
- QGC 连接功能 底层执行逻辑
- 计算机组成原理课程设计实验一:验证74LS181运算和逻辑功能
- QGC 任务规划 -》Survey功能 底层执行逻辑
- 计算机组成原理实验:验证74LS181运算和逻辑功能
- 软件工程第二个程序:“像阿超那样,花20分钟写一个能自动生成小学四则运算题目的 ‘软件’”的功能扩充
- 按位运算操作符底层实现原理
- <<离散数学>>逻辑运算
- 逻辑运算
- javascipt——基础知识——基本数据类型和逻辑运算
- 数据结构分三种:逻辑,物理,运算
- 【python】详解time模块功能asctime、localtime、mktime、sleep、strptime、strftime、time等函数以及时间的加减运算
- 方便实现逻辑功能的代码
- php中逻辑运算的短路算法
- javascript中 逻辑运算
- nginx: if逻辑运算 (与或非) 实现
- 随笔二十九:算术和逻辑运算
- extjs 表格中添加、 删除、撤销、刷新功能
- 逻辑位运算示例