1. 程式人生 > >js加減乘除混合運算

js加減乘除混合運算

function getResult(str){
	// var _str=str.repalce('*','×');
	// var __str=_str.replace('/','÷');
	var str1=str.split('');
	var str2=[];
	for(var i=0;i<str1.length;i++) 
	{
		if(!Number(str1[i])&&str1[i]!='.'&&str1[i]!='0')
		{
			str2.push('|',str1[i],'|');
		}
		else
		{
			str2.push(str1[i]);
		}
	}
	// alert(str12);
	var arr=str2.join('').split('|');
	// alert(arr);
	var ops='+-#×÷'.split('');
	var result=[];
	var temp=[];
	arr.forEach(function(ele,ind){
		if(ele=='(')
		{
			temp.push(ele);
		}
		else if(ele==')')
		{
			var flag=true;
			while(flag)
			{
				if(temp[temp.length-1]!='(')
				{
					result.push(temp.pop());
				}
				else
				{
					temp.pop();
					flag=false;
				}
			}
		}
		else if(ops.indexOf(ele)!=-1)
		{
			cmp(ele,temp);
			function cmp(x,t){
				if(t.length==0||t[t.length-1]=='('||
					(ops.indexOf(x)-ops.indexOf(t[t.length-1]))>2)
				{
					t.push(x);
				}
				else
				{
					result.push(t.pop());
					return cmp(x,t);
				}
			}
		}
		else
		{
			result.push(ele);
		}
	})
	while(temp.length>0)
	{
		if(temp[temp.length-1]!='('){
			result.push(temp.pop());
		}
		else
		{
			temp.pop();
		}
	}
	// alert(result);
	var res=result;
	result=[];
	res.forEach(function(ele,ind){
		if(ele!='')
			result.push(ele);
	})
	// alert(result);
	var s=[];
	// alert(s);
	result.forEach(function(ele,ind){
		var reg=/^\d+(\.\d+)?$/;
		if(reg.test(ele))
		{
			s.push(ele);
		}
		else
		{
			var ans;
			var a=parseFloat(s.pop());
			var b=parseFloat(s.pop());
			if(ele=='+')
				ans=a+b;
			if(ele=='-')
				ans=b-a;
			if(ele=='×')
				ans=a*b;
			if(ele=='÷')
				ans=b/a;
			s.push(ans);
		}
	})
	// alert(s);
	return  s[0];
}