在專案中經常碰到js精度問題,且常用到連續的運算
故寫了個簡單的數學表示式計算,僅支援+ - * / ( )
計算結果
// math.express("(3*(1+2.3)-6)/3*(5-1*(1+1))-2") => 1.9
// math.express.add(1.2,3.33) => 4.53
math.express = (function()
// 兩個浮點數求和
express.add = function(a, b) catch (e)
try catch (e)
m = math.pow(10, math.max(r1, r2));
return math.round(a * m + b * m) / m;
} // 兩個浮點數相減
express.sub = function(a, b) catch (e)
try catch (e)
m = math.pow(10, math.max(r1, r2));
n = (r1 >= r2) ? r1 : r2;
return (math.round(a * m - b * m) / m).tofixed(n);
} // 兩數相除
express.div = function(a, b) catch (e)
try catch (e)
r1 = number(a.tostring().replace(".", ""));
r2 = number(b.tostring().replace(".", ""));
return (r1 / r2) * math.pow(10, t2 - t1);
} express.mul = function(a, b) catch (e)
try catch (e)
return number(s1.replace(".", "")) * number(s2.replace(".", "")) / math.pow(10, m);
} // 運算子優先順序
var priority = express.priority = ;
var cal = ,
"-" : function(a, b) ,
"*" : function(a, b) ,
"/" : function(a, b)
};// 中綴表示式轉字尾表示式
function c2a(exp) (?:\.\d+)?|[\+\-\*\/\%\(\)]/g);
var stack = , result = ;
stack.peek = function()
for (var i = 0; i < exp.length; i++) (?:\.\d+)?/.test(v)) else if (stack.length === 0) else if (v == "(") else if (v == ")")
}stack.pop();
} else if (/[\+\-\*\/\%]/.test(v))
stack.push(v);}}
// 6.最終將棧中的元素依次出棧,輸出。
while (stack.length > 0)
result.push(stack.pop())
}return result;
} // 計算結果
function cc(queue) (?:\.\d+)?/.test(v)) else
}if (stack.length === 1)
return null;
} return express;
})();
數學表示式
只做 1或者2操作,使得給定乙個目標數,乙個初始數,使得初始數到目標數的步驟最短。23 52 1 2 1 113 11 1 1 1 222 1 先判斷目標數字和原始數字的大小,然後在判斷目標數是否為奇數,若是,則 1變成偶數在遞迴,在判斷原始數 2是否大於目標數,若不大於,則做乘2的操作。若小於則不...
Js運算子和表示式
由運算子鏈結的運算元據,所組成的形式稱為表示式 1 算數運算子 取餘console.log 3 2 console.log 2 3 結果 應用 比如隔行換色,奇數行和偶數行換色,比如對2取餘,是1就是奇數行,0是偶數行 通過身份證獲取性別,身份證倒數第二位為偶數,則是女性 自增 var i 1 i ...
模板 表示式運算
這些都是emmmm 給出乙個表示式,其中運算子僅包含 要求求出表示式的最終值資料可能會出現括號情況 還有可能出現多餘括號情況資料保證不會出現 maxlongint的資料。資料可能回出現負數情況 2 2 1 1 16真的是超級麻煩emmmm,今天考試的時候看了看接著就棄了。說實話這個真不應該棄掉,但是...