1. 四則運算的實現算法
a. 對於一個輸入表達式,分別找到表達式中 "*" , "/" , "+" , "-" 在表達式中的位置。
b. 如果“*",“/“ 符號存在,則位置靠前的運算符為當前選定運算符。
c. 如果“*",“/“ 符號不存在,則位置靠前的 "+" 或者 "- " 為當前選定運算符。
d. 從選定運算符的左邊向左遍歷,截取左操作數,遇到新的運算符或者表達式的第一個字符,則遍歷結束。取得左操作數,並記下左操作數的起始位置。
e. 同理,獲取右操作數,並記下右操作數的結束位置。
f. 將左右操作數參與運算的結果,插入回原來表達式 (替換掉左操作數的起始位置 和 右操作數的結束位置之間)
g. 返回,繼續按照同樣的順序計算,直到當前表達式不含有加減乘除運算符,則認為運算結束。
2. 運算符號(+,-,*,/)的輸入響應
a. 當前輸入字符串的最后一個字符如果不是數字,則將最后的字符替換成當前的字符。
3. 小數點的輸入響應
a. 從當前輸入字符串末端開始獲取當前運算因數,如果當前運算因數為空,則在輸入字符串后拼接上"0.";
b. 當前運算因數不為空,但是當前因數已經包含小數點,則忽略當前小數點;
c. 當前運算因數不為空,並且未包含小數點,則在輸入字符串后加上小數點。
4. 等號的響應
a. 計算最后結果,不是數字時(小數點或者運算符號),去掉最后一個字符;
5. 數字鍵的響應
a. 上一次有效輸入是“=”,則應該先清空上一次的計算,開始新一輪的計算。
6. Javascript 浮點數計算精度問題
a. 0.2 + 0.1 結果不等於0.3. 原因跟計算機對於浮點數的編碼規則有關,計算機組成原理提到這個問題,具體細節忘了。
b. 解決辦法:先將參與運算的操作數提升成整數,運算,然后再降低。
c. 0.2 - > 2 , 0.1 -> 1, 0.3 -> 3
