Files

63 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: bd7158d8c442eddfaeb5bd17
title: 構建一個 JavaScript 計算器
challengeType: 3
forumTopicId: 301371
dashedName: build-a-javascript-calculator
---
# --description--
**目標:** 在 [CodePen.io](https://codepen.io) 上實現一個功能類似 <https://codepen.io/freeCodeCamp/full/wgGVVX> 的 App。
在滿足以下 [需求](https://en.wikipedia.org/wiki/User_story) 並能通過所有測試的前提下, 賦予它你自己的個人風格。
可以使用 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 位小數的精度)。
**注意計算器的邏輯:** 應當注意的是,計算器輸入邏輯主要有兩種思路:<dfn>立即執行邏輯</dfn><dfn>公式邏輯</dfn>。 我們的示例使用公式邏輯並遵守運算優先順序,而立即執行則不然。 兩者都是可以接受的,但請注意,根據你的選擇,你的計算器對於某些算式可能會得到與示例不同的計算結果(參見下面的示例)。 只要數學計算可以通過其它現實中計算器的驗證,那麼代碼就是合理的。
**示例:** `3 + 5 x 6 - 2 / 4 =`
- **立即執行邏輯:** `11.5`
- **公式/表達式邏輯:** `32.5`
你可以<a href='https://codepen.io/pen?template=MJjpwO' target='_blank' rel='nofollow'>使用這個 CodePen 模板</a>,點擊 `Save` 即可創建你自己的項目。 或者可以在任何喜歡的環境中使用以下 CDN 鏈接來運行測試:`https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js`
當你完成了本項目,並且該項目所有測試運行通過,請提交項目的 URL。
# --solutions--
```js
// solution required
```