计算表达式的值- 答百度知道网友

原文:

怎样 计算文件中表达式的值,并输出到表达式后面,有多个表达式,但每行有一个表达式

文件中内容 23+4*35-9*4= 4*(3+7-9/3)-45/5= 3+4*32/(8*2)= 24-((9+45)/3)= 将结果输出到等号后面

没仔细研究JavaScript引擎实现的eval的C源码;暂用JavaScript实现,在线测试http://jsfiddle.net/fuweichin/AL5Zf/

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title> New Document </title>
<style type="text/css">
label{
	display:block;
	margin-bottom:5px;
}
</style>
</head>

<body>
<form action="">
<label for="file">
<textarea id="file" style="width:320px;height:240px;overflow:auto;">
23+4*35-9*4=
4*(3+7-9/3)-45/5=
3+4*32/(8*2)=
24-((9+45)/3)=
</textarea>
</label>
<label for="calc">
<button type="button" id="calc">Eval</button>
</label>
</form>
<script type="text/javascript">
/*require*/
if(!String.prototype.trim)
String.prototype.trim=function(){
	return this.replace(/^\s+|\s+$/g,"");
};
if(!Array.prototype.forEach)
Array.prototype.forEach=function(fn, s) {
	var t=this,l=t.length;
	for (var i=0; i<l; i++)
		fn.call(Object(s), t[i], i, t);
};
/*main*/
(function(window){
	var get=function(id){
		return window.document.getElementById(id);
	};
	var getLines=function(){
		var text=get("file").value.trim();
		if(text){
			return text.split(/\n+/);
		}else{
			return [];
		}
	};
	var evalLines=function(event){
		var lines=getLines();//console.log(lines.join(","));
		var newlines=new Array();
		lines.forEach(function(line,index){
			line=line.trim();
			var expr=line.split("=")[0];
			var value="";
			try{
				value=eval("("+expr+")");
				if(typeof value!="number"||!isFinite(value)){
					value="";
				}
			}catch(_){
				
			}finally{
				newlines[index]=expr+"="+value;
			}
		});
		get("file").value=newlines.join("\n");
	};
	get("calc").onclick=evalLines;
})(window);
</script>
</body>
</html>


你可能感兴趣的:(计算表达式的值- 答百度知道网友)