Swift Language
数字
サーチ…
数値型とリテラル
Swiftの組み込みの数値型は次のとおりです。
- ワードサイズ(アーキテクチャに依存)のIntおよび符号なしUIntの署名
- 固定サイズの符号付き整数Int8 、 Int16 、 Int32 、 Int64 、および符号なし整数UInt8 、 UInt16 、 UInt32 、 UInt64
- 浮動小数点型Float32 / Float 、 Float64 / Double 、およびFloat80 (x86のみ)。
リテラル
数値リテラルの型は、コンテキストから推測されます。
let x = 42 // x is Int by default
let y = 42.0 // y is Double by default
let z: UInt = 42 // z is UInt
let w: Float = -1 // w is Float
let q = 100 as Int8 // q is Int8
アンダースコア( _
)は、数値リテラルの数字を区切るために使用されます。先行ゼロは無視されます。
浮動小数点リテラルを使用して指定することができる仮数と指数部を( «significand» e «exponent»
小数のために、 0x «significand» p «exponent»
進のために)。
整数のリテラル構文
let decimal = 10 // ten
let decimal = -1000 // negative one thousand
let decimal = -1_000 // equivalent to -1000
let decimal = 42_42_42 // equivalent to 424242
let decimal = 0755 // equivalent to 755, NOT 493 as in some other languages
let decimal = 0123456789
let hexadecimal = 0x10 // equivalent to 16
let hexadecimal = 0x7FFFFFFF
let hexadecimal = 0xBadFace
let hexadecimal = 0x0123_4567_89ab_cdef
let octal = 0o10 // equivalent to 8
let octal = 0o755 // equivalent to 493
let octal = -0o0123_4567
let binary = -0b101010 // equivalent to -42
let binary = 0b111_101_101 // equivalent to 0o755
let binary = 0b1011_1010_1101 // equivalent to 0xB_A_D
浮動小数点リテラル構文
let decimal = 0.0
let decimal = -42.0123456789
let decimal = 1_000.234_567_89
let decimal = 4.567e5 // equivalent to 4.567×10⁵, or 456_700.0
let decimal = -2E-4 // equivalent to -2×10⁻⁴, or -0.0002
let decimal = 1e+0 // equivalent to 1×10⁰, or 1.0
let hexadecimal = 0x1p0 // equivalent to 1×2⁰, or 1.0
let hexadecimal = 0x1p-2 // equivalent to 1×2⁻², or 0.25
let hexadecimal = 0xFEEDp+3 // equivalent to 65261×2³, or 522088.0
let hexadecimal = 0x1234.5P4 // equivalent to 0x12345, or 74565.0
let hexadecimal = 0x123.45P8 // equivalent to 0x12345, or 74565.0
let hexadecimal = 0x12.345P12 // equivalent to 0x12345, or 74565.0
let hexadecimal = 0x1.2345P16 // equivalent to 0x12345, or 74565.0
let hexadecimal = 0x0.12345P20 // equivalent to 0x12345, or 74565.0
ある数値タイプを別の数値タイプに変換する
func doSomething1(value: Double) { /* ... */ }
func doSomething2(value: UInt) { /* ... */ }
let x = 42 // x is an Int
doSomething1(Double(x)) // convert x to a Double
doSomething2(UInt(x)) // convert x to a UInt
整数イニシャライザは、値がオーバーフローまたはアンダーフローするとランタイムエラーを生成します 。
Int8(-129.0) // fatal error: floating point value cannot be converted to Int8 because it is less than Int8.min
Int8(-129) // crash: EXC_BAD_INSTRUCTION / SIGILL
Int8(-128) // ok
Int8(-2) // ok
Int8(17) // ok
Int8(127) // ok
Int8(128) // crash: EXC_BAD_INSTRUCTION / SIGILL
Int8(128.0) // fatal error: floating point value cannot be converted to Int8 because it is greater than Int8.max
浮動小数点から整数への変換は、 値を0に丸めます 。
Int(-2.2) // -2
Int(-1.9) // -1
Int(-0.1) // 0
Int(1.0) // 1
Int(1.2) // 1
Int(1.9) // 1
Int(2.0) // 2
整数から浮動小数点への変換は不可能です:
Int(Float(1_000_000_000_000_000_000)) // 999999984306749440
数値を文字列に/から変換する
数値を文字列に変換するには、文字列初期化子を使用します。
String(1635999) // returns "1635999"
String(1635999, radix: 10) // returns "1635999"
String(1635999, radix: 2) // returns "110001111011010011111"
String(1635999, radix: 16) // returns "18f69f"
String(1635999, radix: 16, uppercase: true) // returns "18F69F"
String(1635999, radix: 17) // returns "129gf4"
String(1635999, radix: 36) // returns "z2cf"
let x = 42, y = 9001
"Between \(x) and \(y)" // equivalent to "Between 42 and 9001"
文字列を数値に変換するには、数値型の初期化子を使用します。
if let num = Int("42") { /* ... */ } // num is 42
if let num = Int("Z2cF") { /* ... */ } // returns nil (not a number)
if let num = Int("z2cf", radix: 36) { /* ... */ } // num is 1635999
if let num = Int("Z2cF", radix: 36) { /* ... */ } // num is 1635999
if let num = Int8("Z2cF", radix: 36) { /* ... */ } // returns nil (too large for Int8)
丸め
円形
x.5を切り上げて(ただし、-x.5が切り捨てられます)、値を最も近い整数に丸めます。
round(3.000) // 3
round(3.001) // 3
round(3.499) // 3
round(3.500) // 4
round(3.999) // 4
round(-3.000) // -3
round(-3.001) // -3
round(-3.499) // -3
round(-3.500) // -4 *** careful here ***
round(-3.999) // -4
天井
小数点以下の任意の数値を次の大きい整数に丸めます。
ceil(3.000) // 3
ceil(3.001) // 4
ceil(3.999) // 4
ceil(-3.000) // -3
ceil(-3.001) // -3
ceil(-3.999) // -3
床
小数点以下の任意の数値を次に小さな整数に丸めます。
floor(3.000) // 3
floor(3.001) // 3
floor(3.999) // 3
floor(-3.000) // -3
floor(-3.001) // -4
floor(-3.999) // -4
Int
Double
をInt
変換し、10進数値を削除します。
Int(3.000) // 3
Int(3.001) // 3
Int(3.999) // 3
Int(-3.000) // -3
Int(-3.001) // -3
Int(-3.999) // -3
ノート
-
round
、ceil
、floor
は64ビットと32ビットの両方のアーキテクチャを処理します。
乱数生成
arc4random_uniform(someNumber: UInt32) -> UInt32
これにより、 0
からsomeNumber - 1
範囲のランダムな整数が得られます。
UInt32
の最大値は4,294,967,295(つまり2^32 - 1
)です。
例:
コインフリップ
let flip = arc4random_uniform(2) // 0 or 1
ダイスロール
let roll = arc4random_uniform(6) + 1 // 1...6
10月のランダムな日
let day = arc4random_uniform(31) + 1 // 1...31
1990年代のランダム年
let year = 1990 + arc4random_uniform(10)
一般形式:
let number = min + arc4random_uniform(max - min + 1)
number
、 max
、およびmin
はUInt32
。
ノート
- わずかなモジュロバイアスがあり
arc4random
のでarc4random_uniform
好ましいです。 -
UInt32
値をInt
キャストできますが、範囲外になることに注意してください。
累乗
Swiftでは、組み込みのpow()
メソッドを使ってDouble
sを指数化することができます:
pow(BASE, EXPONENT)
以下のコードでは、基数(5)は指数(2)のべき乗に設定されています。
let number = pow(5.0, 2.0) // Equals 25