码迷,mamicode.com
首页 > Web开发 > 详细

js简易计算器底层运算逻辑

时间:2017-08-29 19:45:05      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:i++   try   log   parse   运算   als   计算器   index   ring   

var Calc={
			getData:function(arr){
				var tempStr = "";
				var data = [];
				//格式化数据
				for(var i = 0; i < arr.length; i++){
					if(Number(arr[i])|| Number(arr[i]) == 0){
						tempStr += arr[i]
					}else{
						if(tempStr != ‘‘){
							data.push(tempStr);
						}
						data.push(arr[i]);
						tempStr = ‘‘;		
					}
				}
				if(tempStr != ‘‘){
					data.push(tempStr);
					tempStr = ‘‘;
				}	
				//去掉0开头
				for(var i = 0; i < data.length; i++){
					if(Number(data[i])|| Number(data[i]) == 0){
						data[i] = Number(data[i])
					}
				}
				
				if(data[data.length-1] == "="){
					var result = Calc.calute(data);
					data.push(result);						
				}
				Calc.show(data);		
			},
			show:function(arr){
				console.log(arr.join(""));
			},
			calute:function(arr){
				var newArr = JSON.parse(JSON.stringify(arr));
				//根号
				while(newArr.indexOf(‘sqrt‘) != -1){
					var index = newArr.indexOf(‘sqrt‘);
					var num1 = newArr[index+1];
					var result = Math.sqrt(num1);
					newArr.splice(index,2,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);
				}
				//加法
				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);
				}
				try{
					if(newArr.length > 2){
						throw new Error("计算错误");
					}
				}catch(e){
					console.log(e);
					console.log(newArr);
					return "表达式错误";
				}
				return newArr[0];
			}
			
		}
		
		var arr = ["0","2","0","+","3","+", "sqrt","4","-","8","="];
		Calc.getData(arr);

		//type: 1:空, 2:数字, 3:运算符, 4:等于
		
		function vaild(oldType,type){
			var flag = false;
			//type == 2时
			if((oldType == 1 && type == 2)||(oldType == 2 && type == 2) || (oldType == 3 && type == 2)){
				return true;
			}
			
			//type == 3
			if(oldType == 2 && type == 3){
				flag = true;
			}
			
			//type == 4
			if(oldType == 2 && type == 4){
				flag = true;
			}

			return flag;	
		}

  

js简易计算器底层运算逻辑

标签:i++   try   log   parse   运算   als   计算器   index   ring   

原文地址:http://www.cnblogs.com/muamaker/p/7449820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!