Swift kennt zwei Hauptkategorien von Zahlen: Ganzzahlen und Gleitkommazahlen.
0, 1, -1, 42 und -273.0.0, 3.14 und -1.36969e-10.Um Zahlenliterale besser lesen zu können, darfst du Unterstriche einfügen: 1_000_000 ist dasselbe wie 1000000.
Gleitkomma-Literale kannst du in Dezimal- oder Exponentialschreibweise schreiben.
In den meisten Fällen nimmst du Int für Ganzzahlen und Double für Gleitkommazahlen:
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 bietet dir die üblichen Rechenoperatoren für numerische Berechnungen:
| Operator | Beschreibung | Beispiel |
|---|---|---|
+ |
Addition |
4 + 6 ergibt 10
|
- |
Subtraktion |
15 - 10 ergibt 5
|
* |
Multiplikation |
2 * 3 ergibt 6
|
Swift ist typsicher und erlaubt es nicht, verschiedene numerische Typen in Rechenoperationen zu mischen.
Du kannst einen Int-Wert und einen Double-Wert nicht direkt addieren oder multiplizieren; du musst zuerst einen der beiden Typen in den anderen umwandeln.
Mit dem Operator / dividierst du.
Wenn beide Operanden Ganzzahlen sind, schneidet die Ganzzahldivision den Bruchrest ab:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
Teilst du eine Gleitkommazahl ungleich null durch null, erhältst du inf oder -inf.
Die Division von 0.0 durch 0.0 ergibt nan (keine Zahl).
Eine Ganzzahl durch null zu teilen führt dagegen zu einem Fehler zur Kompilierzeit oder zur Laufzeit:
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
Der Restoperator (%) berechnet den Rest, der beim Teilen zweier Ganzzahlen übrig bleibt:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
In Swift ist % ein echter Rest-Operator und kein Modulo-Operator.
Das Ergebnis trägt immer das Vorzeichen des ersten Operanden (des Dividenden), unabhängig vom Vorzeichen des zweiten Operanden:
5 % -2 // 1
-5 % 2 // -1
Eine Gleitkommazahl rundest du mit der Methode rounded().
Standardmäßig rundet rounded() auf die nächste Ganzzahl.
Du kannst auch eine bestimmte Rundungsregel angeben, zum Beispiel .up oder .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
Wenn du eine numerische Konstante oder Variable ohne Typannotation deklarierst, leitet Swift ihren Typ ab:
Int.Double.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
Um mit Werten unterschiedlicher Typen zu rechnen, wandelst du einen Wert mit Typ-Initialisierern wie Double(_:) oder Int(_:) um:
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)
In dieser Übung schreibst du Code, der einem Freelancer hilft, mit einem Projektmanager zu kommunizieren. Deine Aufgabe ist es, ein paar Hilfsfunktionen bereitzustellen, um schnell Tages- und Monatssätze zu berechnen, optional mit einem gegebenen Rabatt.
Zuerst legen wir ein paar Regeln zwischen dem Freelancer und dem Projektmanager fest:
Manchmal bietet der Freelancer an, einen Rabatt auf seinen Tagessatz zu gewähren (zum Beispiel für seine treuesten Kunden oder gemeinnützige Kunden).
Rabatte werden als Bruchzahlen modelliert, die Prozentsätze darstellen, zum Beispiel 25.0 (25 %).
Implementiere eine Funktion namens dailyRateFrom, um den Tagessatz anhand eines Stundensatzes als Parameter zu berechnen.
Der Vertrag legt fest, dass ein Tag 8 abrechenbare Stunden hat.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
Der zurückgegebene Tagessatz sollte ein Double sein.
Implementiere eine Funktion monthlyRateFrom, um den rabattierten Monatssatz zu berechnen.
Sie nimmt zwei Parameter entgegen, einen Stundensatz und den Rabatt in Prozent.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
Der zurückgegebene Monatssatz sollte auf die nächste ganze Zahl aufgerundet werden.
Implementiere eine Funktion workdaysIn, die ein Budget, einen Stundensatz und einen Rabatt entgegennimmt und berechnet, wie viele vollständige Arbeitstage damit abgedeckt sind.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Die zurückgegebene Anzahl an Tagen sollte auf die nächste ganze Zahl abgerundet werden.
Melde dich bei Exercism an, um Swift mit 35 Konzepte116 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.