許多程式語言都有特定的數字型別,用來表示不同種類的數字,但 JavaScript 只有兩種:
number:一種數字資料型態,採用雙精度 64 位元浮點數格式(IEEE 754)。
例如 -6、-2.4、0、0.1、1、3.14、16.984025、25、976、1024.0 和 500000。bigint:一種數字資料型態,能用任意精度格式表示_整數_。
例如 -12n、0n、4n 和 9007199254740991n。如果你需要任意精度,或是要處理極大的數字,就用 bigint 型別。
否則,number 型別通常是比較好的選擇。
JavaScript 有一個內建的全域物件Math,它提供各種數值捨入函式。
例如,你可以把小數向下取整(floor)或向上取整(ceil),得到最接近的整數。
Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235
JavaScript 提供 6 種不同的運算子,用來對數字執行基本的算術運算。
+:加法運算子,用來求數字之和。-:減法運算子,用來求兩個數字的差。*:乘法運算子,用來求兩個數字的乘積。/:除法運算子,用來把兩個數字相除。2 - 1.5; //=> 0.5
19 / 2; //=> 9.5
%:餘數運算子,用來求相除之後的餘數。
40 % 4; // => 0
-11 % 4; // => -3
**:指數運算子,用來把數字提升到某個次方。
4 ** 3; // => 64
4 ** 1 / 2; // => 2
當一行裡用到多個運算子時,JavaScript 會依照這份優先順序表所顯示的優先順序來計算。 簡單來說,在我們這個情境裡,JavaScript 用的是小學數學課學過的 PEDMAS 規則(括號、指數、除法/乘法、加法/減法)。
const result = 3 ** 3 + 9 * 4 / (3 - 1);
// => 3 ** 3 + 9 * 4/2
// => 27 + 9 * 4/2
// => 27 + 18
// => 45
簡寫賦值運算子是一種更簡短的寫法,用來對變數做算術運算,並把新的值賦予同一個變數。
例如,想想兩個變數x和y。
那麼,x += y就等同於x = x + y。
通常,這裡用的會是數字,而不是變數y。
其他 5 種運算也可以用類似的寫法。
let x = 5;
x += 25; // x is now 30
let y = 31;
y %= 3; // y is now 1
在這個練習中,你將撰寫程式碼,幫助一位自由工作者與客戶溝通某些專案的價格。 你將撰寫幾個工具函式,快速計算客戶所需的費用。
ratePerHour變數和dayRate函式都與金錢有關。
它們的測量單位是每單位時間的金額:分別為小時和天。
一位客戶聯絡這位自由工作者,詢問他們的費率。 這位自由工作者說明他們**每天工作 8 小時。** 然而,這位自由工作者只知道他們在這個專案上的每小時費率。 請幫他們根據每小時費率估算日費率。
dayRate(89);
// => 712
日費率不需要取整,也不需要改成「固定」精度。
另一天,一位專案經理向這位自由工作者提議,以固定預算承接一個專案。 請根據固定預算和這位自由工作者的每小時費率,幫他們計算在預算用完之前可以工作幾天。 結果_必須_無條件捨去到最接近的整數。
daysInBudget(20000, 89);
// => 28
這位自由工作者的客戶經常雇用他們進行橫跨數個月的專案。
在這些情況下,這位自由工作者決定為每個完整月份提供折扣,其餘天數則按日費率計費。
由於你的工作與生活平衡絕佳,每個日曆月只工作 22 天,所以**每個月有 22 個可計費天數。**
請根據每小時費率、專案包含的可計費天數以及每月折扣費率,幫他們估算這類專案的成本。
折扣一律以數字傳入,其中42%會變成0.42。結果_必須_無條件進位到最接近的整數。
priceWithMonthlyDiscount(89, 230, 0.42);
// => 97972