Swift fornisce due categorie principali di numeri: i numeri interi e i numeri in virgola mobile.
0, 1, -1, 42 e -273.0.0, 3.14 e -1.36969e-10.Puoi inserire dei trattini bassi nei letterali numerici per migliorarne la leggibilità: 1_000_000 è identico a 1000000.
I letterali in virgola mobile si possono scrivere in notazione decimale o esponenziale.
Nella maggior parte dei casi, usi Int per i numeri interi e Double per i numeri in virgola mobile:
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 fornisce i operatori aritmetici standard per i calcoli numerici:
| Operatore | Descrizione | Esempio |
|---|---|---|
+ |
Addizione |
4 + 6 vale 10
|
- |
Sottrazione |
15 - 10 vale 5
|
* |
Moltiplicazione |
2 * 3 vale 6
|
Swift è type-safe e non permette di mescolare tipi numerici diversi nelle operazioni aritmetiche.
Non puoi sommare o moltiplicare direttamente un Int e un Double: devi prima convertire un tipo per farlo corrispondere all'altro.
L'operatore / esegue la divisione.
Quando entrambi gli operandi sono numeri interi, la divisione intera tronca l'eventuale parte frazionaria:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
Dividere un numero in virgola mobile diverso da zero per zero dà come risultato inf o -inf.
Dividere 0.0 per 0.0 produce nan (Not a Number).
Al contrario, dividere un numero intero per zero causa un errore in fase di compilazione o di esecuzione:
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'operatore resto (%) calcola il resto che rimane dopo aver diviso due numeri interi:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
In Swift, % è un vero operatore di resto, non un operatore modulo.
Il risultato prende sempre il segno del primo operando (il dividendo), indipendentemente dal segno del secondo operando:
5 % -2 // 1
-5 % 2 // -1
Puoi arrotondare un numero in virgola mobile usando il metodo rounded().
Per impostazione predefinita, rounded() arrotonda all'intero più vicino.
Puoi anche specificare una regola di arrotondamento, come .up o .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
Quando dichiari una costante o una variabile numerica senza annotazione di tipo, Swift ne deduce il tipo:
Int per impostazione predefinita.Double per impostazione predefinita.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
Per eseguire operazioni tra valori di tipi diversi, converti un valore usando gli inizializzatori di tipo come Double(_:) o 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)
In questo esercizio scriverai del codice per aiutare un freelancer a comunicare con un project manager. Il tuo compito è fornire alcune funzioni ausiliarie per calcolare rapidamente le tariffe giornaliere e mensili, facoltativamente con uno sconto dato.
Stabiliamo prima alcune regole tra il freelancer e il project manager:
A volte il freelancer si offre di applicare uno sconto sulla propria tariffa giornaliera (ad esempio per i clienti più fedeli o per i clienti senza scopo di lucro).
Gli sconti sono modellati come numeri frazionari che rappresentano percentuali, ad esempio 25.0 (25%).
Implementa una funzione chiamata dailyRateFrom per calcolare la tariffa giornaliera a partire da una tariffa oraria presa come parametro.
Il contratto definisce che un giorno ha 8 ore fatturabili.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
La tariffa giornaliera restituita dovrebbe essere un Double.
Implementa una funzione monthlyRateFrom per calcolare la tariffa mensile scontata.
Prende due parametri: una tariffa oraria e lo sconto in percentuale.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
La tariffa mensile restituita dovrebbe essere arrotondata per eccesso (prendi il valore ceiling) al numero intero più vicino.
Implementa una funzione workdaysIn che prende un budget, una tariffa oraria e uno sconto, e calcola quanti giorni completi di lavoro coprono.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Il numero di giorni restituito dovrebbe essere arrotondato per difetto (prendi il valore floor) al numero intero inferiore.
Iscriviti a Exercism per imparare e padroneggiare Swift con 35 concetti116 esercizi e il mentoring di persone reali, tutto gratis.