Swift 提供兩大類數字:整數和浮點數。
你可以在數值字面值中加入底線來提升可讀性: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
|
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
在 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)