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 seinen Kunden über die Preise für bestimmte Projekte zu kommunizieren. Du schreibst ein paar Hilfsfunktionen, um die Kosten für die Kunden schnell zu berechnen.
Ein Kunde kontaktiert den Freelancer, um sich nach seinen Sätzen zu erkundigen. Der Freelancer erklärt, dass er 8 Stunden am Tag arbeitet. Allerdings kennt der Freelancer nur seinen Stundensatz für das Projekt. Hilf ihm, einen Tagessatz anhand eines Stundensatzes zu schätzen.
Implementiere die Funktion dailyRateFrom(hourlyRate:), die das Argument hourlyRate entgegennimmt, das den Stundensatz des Freelancers enthält.
Die Funktion soll den Tagessatz basierend auf dem Stundensatz zurückgeben.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
Der zurückgegebene Tagessatz sollte ein Double sein.
Manchmal möchte ein Kunde den Freelancer für einen längeren Zeitraum engagieren. Der Freelancer ist bereit, dem Kunden einen Rabatt zu gewähren, aber nur, wenn der Kunde ihn für mindestens einen Monat engagiert. Insgesamt gibt es 22 Arbeitstage. Hilf dem Freelancer, seinen Monatssatz anhand seines Stundensatzes und des Prozentsatzes zu berechnen, den er als Rabatt auf den Pauschalpreis gewähren möchte, gerundet auf die nächste ganze Zahl.
Implementiere die Funktion monthlyRateFrom(hourlyRate:withDiscount:). Sie nimmt die Argumente hourlyRate, das den Stundensatz des Freelancers enthält, und withDiscount, das den Rabatt enthält, den der Freelancer dem Kunden gewähren möchte, entgegen.
Die Funktion soll den Monatssatz gerundet auf die nächste ganze Zahl zurückgeben.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
Eines Tages bietet ein Projektmanager dem Freelancer an, an einem Projekt mit einem festen Budget zu arbeiten. Hilf ihm, anhand des festen Budgets und des Stundensatzes des Freelancers die Anzahl der Tage zu berechnen, die er arbeiten würde, bis das Budget aufgebraucht ist. Berücksichtige, dass der Freelancer in diesem Szenario immer bereit ist, den Rabatt zu gewähren, unabhängig von der Anzahl der gebuchten Tage. Das Ergebnis muss auf die nächste ganze Zahl abgerundet werden.
Implementiere die Funktion workdaysIn(budget:hourlyRate:withDiscount:), die die folgenden Argumente entgegennimmt:
budget, das das Budget für das Projekt enthält.hourlyRate, das den Stundensatz des Freelancers enthält.withDiscount, das den Rabatt enthält, den der Freelancer dem Kunden gewähren möchte.Die Funktion soll die Anzahl der Arbeitstage zurückgeben, die der Freelancer am Projekt arbeiten wird, abgerundet.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Melde dich bei Exercism an, um Swift mit 35 Konzepte116 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.