Η Swift παρέχει δύο βασικές κατηγορίες αριθμών: τους ακέραιους και τους αριθμούς κινητής υποδιαστολής.
0, 1, -1, 42 και -273.0.0, 3.14 και -1.36969e-10.Μπορείς να εισάγεις κάτω παύλες στα αριθμητικά λεκτικά για να βελτιώσεις την αναγνωσιμότητα: το 1_000_000 είναι ίδιο με το 1000000.
Τα λεκτικά κινητής υποδιαστολής μπορούν να γραφτούν σε δεκαδική ή εκθετική μορφή.
Στις περισσότερες περιπτώσεις, χρησιμοποιείς τον Int για τους ακέραιους και τον Double για τους αριθμούς κινητής υποδιαστολής:
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 παρέχει τους τυπικούς αριθμητικούς τελεστές για αριθμητικούς υπολογισμούς:
| Τελεστής | Περιγραφή | Παράδειγμα |
|---|---|---|
+ |
Πρόσθεση | το 4 + 6 δίνει 10
|
- |
Αφαίρεση | το 15 - 10 δίνει 5
|
* |
Πολλαπλασιασμός | το 2 * 3 δίνει 6
|
Η Swift είναι ασφαλής ως προς τους τύπους και δεν επιτρέπει την ανάμιξη διαφορετικών αριθμητικών τύπων σε αριθμητικές πράξεις.
Δεν μπορείς να προσθέσεις ή να πολλαπλασιάσεις απευθείας ένα Int και ένα Double. Πρέπει πρώτα να μετατρέψεις τον έναν τύπο ώστε να ταιριάζει με τον άλλον.
Ο τελεστής / εκτελεί τη διαίρεση.
Όταν και οι δύο τελεστέοι είναι ακέραιοι, η ακέραια διαίρεση αποκόπτει τυχόν κλασματικό υπόλοιπο:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
Η διαίρεση ενός μη μηδενικού αριθμού κινητής υποδιαστολής με το μηδέν δίνει inf ή -inf.
Η διαίρεση του 0.0 με το 0.0 παράγει nan (όχι αριθμός).
Αντίθετα, η διαίρεση ενός ακέραιου με το μηδέν προκαλεί σφάλμα κατά τη μεταγλώττιση ή κατά την εκτέλεση:
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
Ο τελεστής υπολοίπου (%) υπολογίζει το υπόλοιπο που απομένει μετά τη διαίρεση δύο ακεραίων:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
Στη Swift, το % είναι ένας γνήσιος τελεστής υπολοίπου και όχι τελεστής modulo.
Το αποτέλεσμα παίρνει πάντα το πρόσημο του πρώτου τελεστέου (του διαιρετέου), ανεξάρτητα από το πρόσημο του δεύτερου τελεστέου:
5 % -2 // 1
-5 % 2 // -1
Μπορείς να στρογγυλοποιήσεις έναν αριθμό κινητής υποδιαστολής χρησιμοποιώντας τη μέθοδο rounded().
Από προεπιλογή, η rounded() στρογγυλοποιεί στον πλησιέστερο ακέραιο.
Μπορείς επίσης να δώσεις έναν συγκεκριμένο κανόνα στρογγυλοποίησης, όπως .up ή .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
Όταν δηλώνεις μια αριθμητική σταθερά ή μεταβλητή χωρίς επισημείωση τύπου, η Swift συμπεραίνει τον τύπο της:
Int.Double.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
Για να κάνεις πράξεις ανάμεσα σε τιμές διαφορετικών τύπων, μετέτρεψε τη μία τιμή χρησιμοποιώντας αρχικοποιητές τύπου όπως Double(_:) ή 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)
Σε αυτή την άσκηση θα γράφεις κώδικα για να βοηθήσεις έναν freelancer να συνεννοηθεί με έναν υπεύθυνο έργου. Το καθήκον σου είναι να παρέχεις μερικά βοηθητικά εργαλεία για να υπολογίζεις γρήγορα τις ημερήσιες και τις μηνιαίες χρεώσεις, προαιρετικά με μια δεδομένη έκπτωση.
Πρώτα ορίζουμε μερικούς κανόνες ανάμεσα στον freelancer και στον υπεύθυνο έργου:
Μερικές φορές, ο freelancer προσφέρεται να εφαρμόσει έκπτωση στην ημερήσια χρέωσή του (για παράδειγμα για τους πιο πιστούς πελάτες του ή για πελάτες μη κερδοσκοπικών οργανισμών).
Οι εκπτώσεις αναπαριστώνται ως δεκαδικοί αριθμοί που αντιπροσωπεύουν ποσοστά, για παράδειγμα, 25.0 (25%).
Υλοποίησε μια συνάρτηση με το όνομα dailyRateFrom για να υπολογίσεις την ημερήσια χρέωση, με δεδομένη την ωριαία χρέωση ως παράμετρο.
Το συμβόλαιο ορίζει ότι μια ημέρα έχει 8 τιμολογήσιμες ώρες.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
Η ημερήσια χρέωση που επιστρέφεται πρέπει να είναι Double.
Υλοποίησε μια συνάρτηση monthlyRateFrom για να υπολογίσεις τη μηνιαία χρέωση με έκπτωση.
Παίρνει δύο παραμέτρους, μια ωριαία χρέωση και την έκπτωση σε ποσοστό.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
Η μηνιαία χρέωση που επιστρέφεται πρέπει να είναι στρογγυλοποιημένη προς τα πάνω (να παίρνεις την οροφή) στον πλησιέστερο ακέραιο.
Υλοποίησε μια συνάρτηση workdaysIn που παίρνει έναν προϋπολογισμό, μια ωριαία χρέωση και μια έκπτωση, και υπολογίζει πόσες πλήρεις ημέρες εργασίας καλύπτονται.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
Ο αριθμός των ημερών που επιστρέφεται πρέπει να είναι στρογγυλοποιημένος προς τα κάτω (να παίρνεις το δάπεδο) στον αμέσως μικρότερο ακέραιο.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Swift με 35 έννοιες116 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.