[問題] 利用 eval() 計算四則運算 & 次方運算
我想利用 eval() 計算四則運算,以及 Math.pow() 函數
以下是我的架構
var expr = "(1 + 2) * pow(2, 3) ,haha@_@";
//(1 + 2)* pow(2, 3) ,haha@_@
expr = expr.replace(/[^0-9a-z\.\+\-\*\/\(\)]/ig, ""); //過濾掉特殊字元
//(1+2)*pow(2,3)haha
expr = expr.replace(/(Math\.)?pow\(/ig, "_");
//(1+2)*_2,3)haha
expr = expr.replace(/[a-z]/ig, "");
//(1+2)*_2,3)
expr = expr.replace(/_/g, "Math.pow("); //將 pow() 正名為 Math.pow()
//(1+2)*Math.pow(2,3)
alert("output: " + eval(expr));
//output: 16
但是覺得使用 pow(a, b) 有點麻煩,希望用 a ^ b 來表示 a 的 b 次方
這樣就要考慮優先權關係
要使得 ^ 運算元變成比乘、除還要優先,而且順序是 由右向左 優先做的
例如下面兩個 case 不一樣
2 ^ 2 ^ 3 * 4 ^ 2
= Math.pow(2, Math.pow(2, 3)) * Math.pow(4, 2)
= 4096
(2 ^ 2) ^ 3 * 4 ^ 2
= Math.pow(Math.pow(2, 2), 3) * Math.pow(4, 2)
= 1024
這樣變的很複雜,好像不能單純用字串取代就可以解決
請問各位大大,這個問題有沒有比較好的解決方法?
看在我著色精美的份上幫幫忙吧... m(_ _)m
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.66.250.52
→
04/02 17:34, , 1F
04/02 17:34, 1F
→
04/02 17:35, , 2F
04/02 17:35, 2F
推
04/08 01:29, , 3F
04/08 01:29, 3F
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章