数の型いろいろ

基本
型変換
いろいろなInt
DoubleとFloat
いろいろな進数そして指数
ゼロパディングと桁区切り
ifの条件文に注意

基本

Int型に勝手に解釈されたり明示したり。

let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70
let explicitFloat: Float = 4

let meaningOfLife = 42
let pi = 3.14159
let anotherPi = 3 + 0.14159	//整数+小数=Double型

型変換

Intとかに限らない話だが、型変換をするときは「変換先(変数名)」とする。

let label = "The width is "
let width = 94
let widthlabel = label + String(width)	//String型に変換し文字列を結合

let three = 3	//Int型
let pointOneFourOneFiveNine = 0.14159	//Double型
let pi = Double(three) + pointOneFourOneFiveNine	//Double型に変換しDouble型同士の和の計算

//Double→Intにすると切り捨てが発生する
let integerPi = Int(pi)	//3

いろいろなInt

IntにもいろいろなIntがいる。
符号があるのかないのか、表せる範囲が8・16・32・64bitのどれなのかとか。
Int8、UInt8、Int16、UInt16、Int32、UInt32、Int64、UInt64ってかんじ。(Uはもちろんunsigned)

「型.min」「型.max」とやるとその型で表せる範囲の最小値と最大値が取れる。

//UInt8型定数minValue。UInt8の最小値は0。
let minValue = UInt8.min
//同じくUInt8型、最大値は255
let maxValue = UInt8.max

ちなみにInt型は32bitプラットフォームだとInt32型、64bitプラットフォームだとInt64型と同じになるらしい。 同様にUInt型は32bit→UInt32で64bit→UInt64。

範囲外の数字を入れると怒られちゃうので注意。

//以下全てエラー

//-1は符号なし8ビット整数の範囲外
let cannotBeNegative: UInt8 = -1
//Int8の上限(Int8.max)は127であり、128はInt8で表現できない
let tooBig: Int8 = Int8.max + 1

また、違うInt型を足し合わせるときは型変換をすること

//UInt16型の2000
//アンダーバーについては「ゼロパディングと桁区切り」参照
let twoThousand: UInt16 = 2_000
//UInt8型の1
let one: UInt8 = 1
//UInt8からUInt16に変換したうえでのUInt16型同士の和の計算
let twoThousandAndOne = twoThousand + UInt16(one)

DoubleとFloat

みんな大好き小数、Double型とFloat型。
Doubleが64bit浮動小数点数、Floatが32bit浮動小数点数。
だいたいそんな感じ。

いろいろな進数そして指数

普通に書くと10進数の数字となるわけだが、2進数とか8進数とか16進数ってのもある。
お約束通り2進数が「0b~」で8進数が「0o~」で16進数が「0x~」

//全て10進数でいうところの17になる
let decimalInteger = 17
let binaryInteger = 0b10001
let octalIngeter = 0o21
let hexadecimalInteger = 0x11

10進数の後ろにe2とかe-2と付けると、それは×10^2や×10^(-2)の証。
16進数の後ろにp2とかp-2と付けると、それは×2^2や×2^(-2)の証。

//全て10進数でいうところの12.1875になる
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0

ゼロパディングと桁区切り

可読性を上げるためにゼロパディングやアンダーバーによる桁区切りをしてもよい。

let paddedDouble = 000123.456	//123.456
let oneMillion = 1_000_000	//1000000
let justOverOneMillion = 1_000_000.000_000_1	//1000000.0000001

ifの条件文に注意

Swiftにおいてはifの条件文に数字を入れるとエラーとなるので注意。

let i = 1
//これはエラー
if i {
	// ...
}
//これは「i==1」からブールが返ってくるのでOK
if i == 1 {
	// ...
}

これ以上のif文vs数字の話はif文のところに書く。。。

↑ PAGE TOP