4.6 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
bd7158d8c442eddfaeb5bd17 | 構建一個 JavaScript 計算器 | 3 | 301371 | build-a-javascript-calculator |
--description--
目標: 在 CodePen.io 上實現一個功能類似 https://codepen.io/freeCodeCamp/full/wgGVVX 的 App。
在滿足以下 需求 並能通過所有測試的前提下, 賦予它你自己的個人風格。
可以使用 HTML、JavaScript、CSS、Bootstrap、SASS、React、Redux、jQuery 來完成這個挑戰。 但鑑於這個章節的學習內容與前端框架相關,推薦使用一款前端框架(比如 React)來完成這個挑戰;不推薦使用前面沒有提到的技術,否則風險自負。 不推薦使用前面沒有提到的技術,否則風險自擔。 我們有計劃新增其他前端框架課程,例如 Angular 和 Vue,不過目前還沒有這些內容。 我們會接受並嘗試修復你在使用推薦技術棧創建項目時報告的問題。 編碼愉快!
需求 1: 計算器應該包含一個具有 id="equals"
屬性的可以點擊的元素,元素的文本內容爲 =
(等於符號)。
需求 2: 計算器應該包含 10 個具有如下 id 屬性的可以點擊的元素,每個元素的文本內容對應 0-9 的數字:id="zero"
、id="one"
、id="two"
、id="three"
、id="four"
、id="five"
、id="six"
、id="seven"
、id="eight"
、id="nine"
。
需求 3: 計算器應該包含四個可以點擊的元素,文本內容對應4個主要數學運算符,且應具有如下 id 屬性: id="add"
, id="subtract"
, id="multiply"
, id="divide"
。
需求 4: 計算器應該包含一個可點擊的 .
(小數點)符號,對應的 id="decimal"
。
需求 5: 計算器應該包含一個具有 id="clear"
屬性的可以點擊的元素。
需求 6: 我的計算器應該包含一個用於展示數值的元素,這個元素具有 id="display"
屬性。
需求 7: 在任何時候按下 clear
鍵,都會清空輸入和輸出的數值並且使計算器回到初始狀態;此時在 id 爲 display
的元素中應該顯示數字 0。
需求 8: 在輸入數字的同時,應該能看到輸入的數字展示在 id 爲 display
的元素中。
需求 9: 應該可以在任意順序下對一串任意長度的數字執行加、減、乘、除操作,並且當按下 =
時,正確答案應該顯示在 id 爲 display
的元素中。
需求 10: 在輸入數字的同時,計算器應該不允許一個數字以多個零開頭。
需求 11: 當點擊小數點元素時,當前展示的數值後面應該添加一個 .
符號;數字中不允許出現兩個 .
符號。
需求 12: 我可以對包含小數點的數字執行任何四則運算(+
、-
、*
、/
)。
需求 13: 如果連續鍵入了兩個及以上的運算符,應該執行最後一次鍵入的運算符(負數(-
)運算符除外)。 例如,如果輸入 5 + * 7 =
,結果應該是 35
(等同於 5 * 7
);如果輸入 5 * - 5 =
,結果應該是 -25
(等同於 5 * (-5)
)。
需求 14: 如果在按下 =
符號後繼續按一個運算符,則應該在上一次計算結果的基礎上進行新的計算。
需求 15: 當需要四捨五入時,計算器可以處理結果的精度(注意:處理到多少位沒有一個準確的標準,但是至少能處理類似 2 / 7
這樣的計算,使之至少有 4 位小數的精度)。
注意計算器的邏輯: 應當注意的是,計算器輸入邏輯主要有兩種思路:立即執行邏輯 和 公式邏輯。 我們的示例使用公式邏輯並遵守運算優先順序,而立即執行則不然。 兩者都是可以接受的,但請注意,根據你的選擇,你的計算器對於某些算式可能會得到與示例不同的計算結果(參見下面的示例)。 只要數學計算可以通過其它現實中計算器的驗證,那麼代碼就是合理的。
示例: 3 + 5 x 6 - 2 / 4 =
- 立即執行邏輯:
11.5
- 公式/表達式邏輯:
32.5
你可以使用這個 CodePen 模板,點擊 Save
即可創建你自己的項目。 或者可以在任何喜歡的環境中使用以下 CDN 鏈接來運行測試:https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js
。
當你完成了本項目,並且該項目所有測試運行通過,請提交項目的 URL。
--solutions--
// solution required