學習軌道
/
Swift
Swift
/
練習
/
自由工作者費率
自由工作者費率

自由工作者費率

學習練習

簡介

數字

Swift 提供兩大類數字:整數與浮點數。

  • 整數代表沒有小數部分的數字,例如 0、1、-1、42 和 -273。
  • 浮點數代表帶有小數部分的數字,例如 0.0、3.14 和 -1.36969e-10。

你可以在數字字面值中插入底線來提升可讀性:1_000_000 和 1000000 完全相同。 浮點數字面值可以寫成十進位或指數標記法。

大多數情況下,整數會使用 Int,浮點數則使用 Double:

let speed: Int = 42                           // Explicit Int
let pi: Double = 3.14                         // Explicit Double
let giga: Double = 1_000_000_000              // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34  // Double in scientific notation

算術運算子

Swift 提供標準的算術運算子來進行數值計算:

運算子 說明 範例
+ 加法 4 + 6 的計算結果是 10
- 減法 15 - 10 的計算結果是 5
* 乘法 2 * 3 的計算結果是 6
Caution

Swift 是型別安全的,不允許在算術運算中混用不同的數字型別。 你無法直接將 Int 和 Double 相加或相乘;必須先轉換其中一個型別,讓兩者一致。

除法

/ 運算子會執行除法。 當兩個運算元都是整數時,整數除法會捨去小數餘數:

5.0 / 2.0 // 2.5 (Double division)
5 / 2     // 2 (integer division truncates the remainder)

非零的浮點數除以零會得到 inf 或 -inf。 0.0 除以 0.0 會產生 nan(Not a Number)。 相對地,整數除以零會導致編譯期或執行期錯誤:

print(5.0 / 0.0)  // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0)  // Prints nan

// The following line will not compile:
// print(5 / 0) // Error: Division by zero

餘數運算子

餘數運算子(%)會計算兩整數相除後剩下的餘數:

5 % 2  // 1
-5 % 2 // -1

// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Note

在 Swift 中,% 是真正的餘數運算子,而不是模運算子。 結果的正負號一律取決於第一個運算元(被除數),與第二個運算元的正負號無關:

5 % -2  // 1
-5 % 2  // -1

浮點數的取整

你可以用 rounded() 方法將浮點數取整。 預設情況下,rounded() 會取最接近的整數。 你也可以指定特定的取整規則,例如 .up 或 .down:

let x = 3.14
let y = x.rounded()      // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up)   // 4.0

型別推論

當你宣告數字常數或變數而沒有加上型別標註時,Swift 會推論它的型別:

  • 不帶小數的數字預設為 Int。
  • 帶有小數點的數字預設為 Double。
let x = 42         // Inferred as Int
let y = 42.0       // Inferred as Double
let z: Double = 42 // Explicitly typed as Double

型別轉換

若要在不同型別的值之間進行運算,請使用型別初始化器(例如 Double(_:) 或 Int(_:))轉換其中一個值:

let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0

let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)

說明

在這道練習中,你將撰寫程式碼,協助一位自由工作者與專案經理溝通。你的任務是提供幾個工具函式,用來快速計算日薪與月薪,並可選擇性套用指定的折扣。

我們先在自由工作者與專案經理之間訂立幾條規則:

  • 日薪是時薪的 8 倍。
  • 一個月有 22 個可計費工作日。

有時,自由工作者會選擇在日薪上套用折扣(例如提供給最忠實的客戶,或非營利客戶)。

折扣以代表百分比的小數來表示,例如 25.0(25%)。

1. 根據時薪計算日薪

請實作名為 dailyRateFrom 的函式,根據作為參數的時薪計算日薪。 合約定義一天有 8 個可計費小時。

dailyRateFrom(hourlyRate: 60)
// Returns 480.0

回傳的日薪應該是 Double。

2. 根據時薪與折扣計算月薪

請實作 monthlyRateFrom 函式,計算折扣後的月薪。 它接受兩個參數:時薪與折扣百分比。

monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129

回傳的月薪應該向上取整(取天花板值)至最接近的整數。

3. 根據預算、時薪與折扣計算完整工作日數

請實作函式 workdaysIn,它接受預算、時薪與折扣,並計算這樣能涵蓋多少個完整的工作日。

workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0

回傳的天數應該向下取整(取地板值)至最接近的整數。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Swift Exercism

準備好開始 自由工作者費率 了嗎?

註冊 Exercism,透過 35 個概念116 個練習 和真人引導來學習並精通 Swift,全部免費。