Suche…


Zahlentypen und Literale

Die integrierten numerischen Typen von Swift sind:

Literale

Ein numerischer Literaltyp wird aus dem Kontext abgeleitet:

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

Unterstriche ( _ ) können verwendet werden, um Ziffern in numerischen Literalen zu trennen. Führende Nullen werden ignoriert.

Fließkomma-Literale können unter Verwendung von signifikanten und exponentiellen Teilen angegeben werden ( «significand» e «exponent» für Dezimal; 0x «significand» p «exponent» für Hexadezimal).

Integer-Literal-Syntax

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

Fließkomma-Literal-Syntax

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

Konvertieren Sie einen numerischen Typ in einen anderen

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

Integer-Initialisierer erzeugen einen Laufzeitfehler, wenn der Wert über- oder unterläuft:

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

Float-to-Integer-Konvertierung rundet die Werte gegen Null :

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

Die Ganzzahl-zu-Float-Konvertierung kann verlustbehaftet sein :

Int(Float(1_000_000_000_000_000_000))  // 999999984306749440

Zahlen in / aus Zeichenketten konvertieren

Verwenden Sie String-Initialisierer zum Konvertieren von Zahlen in Strings:

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"

Oder verwenden Sie für einfache Fälle die String-Interpolation :

let x = 42, y = 9001
"Between \(x) and \(y)"  // equivalent to "Between 42 and 9001"

Verwenden Sie Initialisierer für numerische Typen, um Zeichenfolgen in Zahlen zu konvertieren:

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)

Runden

runden

Rundet den Wert auf die nächste ganze Zahl, wobei x.5 aufgerundet wird.

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

ceiling

Rundet eine beliebige Zahl mit einem Dezimalwert auf die nächstgrößere ganze Zahl.

ceil(3.000) // 3
ceil(3.001) // 4
ceil(3.999) // 4

ceil(-3.000) // -3
ceil(-3.001) // -3
ceil(-3.999) // -3

Fußboden

Rundet jede Zahl mit einem Dezimalwert auf die nächst kleinere ganze Zahl.

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

Konvertiert ein Double in ein Int und löscht jeden Dezimalwert.

Int(3.000) // 3
Int(3.001) // 3
Int(3.999) // 3

Int(-3.000) // -3
Int(-3.001) // -3
Int(-3.999) // -3

Anmerkungen

  • round , ceil und floor verarbeiten sowohl 64- als auch 32-Bit-Architektur.

Zufallszahlengenerierung

arc4random_uniform(someNumber: UInt32) -> UInt32

Dadurch erhalten Sie zufällige Ganzzahlen im Bereich von 0 bis someNumber - 1 .

Der Maximalwert für UInt32 beträgt 4.294.967.295 (d. UInt32 2^32 - 1 ).

Beispiele:

  • Münzwurf

      let flip = arc4random_uniform(2) // 0 or 1
    
  • Würfelwurf

      let roll = arc4random_uniform(6) + 1 // 1...6
    
  • Zufälliger Tag im Oktober

      let day = arc4random_uniform(31) + 1 // 1...31
    
  • Zufälliges Jahr in den 1990er Jahren

      let year = 1990 + arc4random_uniform(10)
    

Generelle Form:

let number = min + arc4random_uniform(max - min + 1)

wo number , max und min sind UInt32 .

Anmerkungen

  • Mit arc4random gibt es eine leichte Modulo-Neigung, so dass arc4random_uniform bevorzugt wird.
  • Sie können einen UInt32 Wert in einen Int Wert UInt32 jedoch nur darauf, den Bereich zu verlassen.

Potenzierung

In Swift, können wir potenzieren Double s mit der eingebauten in pow() Methode:

pow(BASE, EXPONENT)

Im folgenden Code wird die Basis (5) auf die Potenz des Exponenten (2) eingestellt:

let number = pow(5.0, 2.0) // Equals 25


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow