public function math(str:String):Number{
//如果格式化字符是数字 就返回这个数字
if(parseFloat(str).toString() == str && !isNaN(parseFloat(str))){
return parseFloat(str);
}
//判断括号 优先计算括号内 然后将计算结果再次代入字符串进行递归
var left:int;
var right:int;
while(str.indexOf("(") >= 0){
left = str.lastIndexOf("(");
right = str.indexOf(")",left);
str = str.substring(0,left) +
math(str.substring(left + 1,right)).toString() +
str.substring(right + 1 , str.length);
}
//判断运算符 由于运算优先 所以先进行 + - 分割 从而优先 运算 * /
var index:int;
if((index = str.indexOf("+")) >= 0){
return math(str.substring(0,index)) + math(str.substring(index + 1,str.length));
}else if((index = str.indexOf("-")) >= 0){
return math(str.substring(0,index)) - math(str.substring(index + 1,str.length));
}else if((index = str.indexOf("*")) >= 0){
return math(str.substring(0,index)) * math(str.substring(index + 1,str.length));
}else if((index = str.indexOf("/")) >= 0){
return math(str.substring(0,index)) / math(str.substring(index + 1,str.length));
}
//此处返回0是因为当字段内容既不存在 +-*/() 也不是数字的情况下 即递归的表达式类似 -1 分割出来的 "" - "1" -> "0" - "1"
return 0;
}