Swift propose deux grandes catégories de nombres : les entiers et les nombres à virgule flottante.
0, 1, -1, 42 et -273.0.0, 3.14 et -1.36969e-10.Tu peux insérer des tirets bas dans les littéraux numériques pour en améliorer la lisibilité : 1_000_000 est identique à 1000000.
Les littéraux à virgule flottante peuvent s'écrire en notation décimale ou exponentielle.
Dans la plupart des cas, on utilise Int pour les entiers et Double pour les nombres à virgule flottante :
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 fournit les opérateurs arithmétiques standards pour les calculs numériques :
| Opérateur | Description | Exemple |
|---|---|---|
+ |
Addition |
4 + 6 donne 10
|
- |
Soustraction |
15 - 10 donne 5
|
* |
Multiplication |
2 * 3 donne 6
|
Swift est un langage à typage sûr : il n'autorise pas le mélange de types numériques différents dans les opérations arithmétiques.
Tu ne peux pas additionner ou multiplier directement un Int et un Double ; tu dois d'abord convertir l'un des deux types pour qu'il corresponde à l'autre.
L'opérateur / effectue la division.
Quand les deux opérandes sont des entiers, la division entière tronque toute partie fractionnaire :
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
Diviser un nombre à virgule flottante non nul par zéro donne inf ou -inf.
Diviser 0.0 par 0.0 produit nan (Not a Number).
En revanche, diviser un entier par zéro provoque une erreur à la compilation ou à l'exécution :
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
L'opérateur de reste (%) calcule le reste de la division de deux entiers :
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
En Swift, % est un véritable opérateur de reste, et non un opérateur modulo.
Le résultat porte toujours le signe du premier opérande (le dividende), quel que soit le signe du second :
5 % -2 // 1
-5 % 2 // -1
Tu peux arrondir un nombre à virgule flottante avec la méthode rounded().
Par défaut, rounded() arrondit à l'entier le plus proche.
Tu peux aussi fournir une règle d'arrondi précise, comme .up ou .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
Quand tu déclares une constante ou une variable numérique sans annotation de type, Swift en déduit le type :
Int.Double.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
Pour effectuer des opérations entre des valeurs de types différents, convertis l'une des valeurs à l'aide d'initialiseurs de type comme Double(_:) ou Int(_:) :
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)
Dans cet exercice, tu vas écrire du code pour aider un freelance à communiquer avec un chef de projet. Ta tâche consiste à fournir quelques utilitaires pour calculer rapidement les tarifs journalier et mensuel, éventuellement avec une remise donnée.
Nous commençons par établir quelques règles entre le freelance et le chef de projet :
Parfois, le freelance propose d'appliquer une remise sur son tarif journalier (par exemple pour ses clients les plus fidèles ou pour ses clients à but non lucratif).
Les remises sont modélisées par des nombres décimaux représentant des pourcentages, par exemple 25.0 (25 %).
Implémente une fonction appelée dailyRateFrom pour calculer le tarif journalier à partir d'un tarif horaire passé en paramètre.
Le contrat définit qu'une journée compte 8 heures facturables.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
Le tarif journalier renvoyé doit être un Double.
Implémente une fonction monthlyRateFrom pour calculer le tarif mensuel remisé.
Elle prend deux paramètres : un tarif horaire et la remise en pourcentage.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
Le tarif mensuel renvoyé doit être arrondi à l'entier supérieur (arrondi au plafond).
Implémente une fonction workdaysIn qui prend un budget, un tarif horaire et une remise, et calcule combien de journées de travail complètes cela couvre.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Le nombre de jours renvoyé doit être arrondi à l'entier inférieur (arrondi au plancher).
Inscris-toi sur Exercism pour apprendre et maîtriser Swift avec 35 concepts116 exercices, et un vrai mentorat humain, le tout gratuitement.