Swiftは、数値を整数と浮動小数点数の2つの主要なカテゴリーに分けています。
数値リテラルにアンダースコアを挿入すると、可読性を高めることができます。1_000_000 は 1000000 と同じです。
浮動小数点リテラルは、10進数表記または指数表記で書くことができます。
ほとんどの場合、整数には 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(非数)になります。
対照的に、整数をゼロで割ると、コンパイル時または実行時エラーになります。
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
余り演算子(%)は、2つの整数を割った後の余りを計算します。
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Swiftでは、%はモジュロ演算子ではなく、真の余り演算子です。
結果は常に、2番目のオペランドの符号に関係なく、最初のオペランド(被除数)の符号を取ります。
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)