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;
}