Int, Float, Doubleの数値どおしの型変換、キャストを説明してくよ。
Int to Float/Doubleの型変換(キャスト)
1 2 3 4 5 6 |
let age1 = 13 // Int let ageFloat1 = Float(age1) let ageDouble1 = Double(age1) // 補足: type(Of: )は型を返すメソッド type(of: ageFloat1) // Float.Type type(of: ageDouble1) // Double.Type |
上記のようにFloat(), Doubleの中に値を入れるだけ。
Float to Int/Doubleの型変換(キャスト)
1 2 3 4 5 6 |
let age2: Float = 13.0 // Float let ageInt2 = Int(age2) let ageDouble2 = Double(age2) type(of: ageInt2) // Int.Type type(of: ageDouble2) // Double.Type |
こちらも上記と同じく、Int(), Doubleの中に値を入れるだけ。
Double to Int/Floatの型変換(キャスト)
1 2 3 4 5 6 |
let age3: Double = 13.0 // Double let ageInt3 = Int(age3) let ageDouble3 = Float(age3) type(of: ageInt2) // Int.Type type(of: ageDouble2) // Double.Type |
こちらも同じです。
型変換(キャスト)の注意事項
1 2 3 |
let hoge = 3.14 // 3.14 let fuga = Int(hoge) // 3 let moe = Float(fuga) // 3 |
こちらのように最初は3.14という値を持っているのに、一度Intに突っ込んでしまうとIntは整数なので、もう一度Floatにキャストして戻しても、小数点以下が欠落してしまう。
これを桁落ちといい、これによる誤差を丸め誤差という。
tips: extensionを使った書き方
もっと流れるようにキャストを書きたいという場合は、以下のようにextensionに追加してしまうと良い。(今回はInt -> float, Dloubleの場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
let age4 = 13 let ageFloat4 = age4.toFloat() let ageDouble4 = age4.toDouble() type(of: ageFloat4) // Float.Type type(of: ageDouble4) // Double.Type extension Int { func toFloat() -> Float { Float(self) } func toDouble() -> Double { Double(self) } } |