JAVA - ΕΝΟΤΗΤΑ 6 – Floating-Point Data Types in Java 11


Εκτός από τους ακέραιους αριθμούς μπορούμε να ορίσουμε μια Java μεταβλητή να δέχεται και δεκαδικούς αριθμούς. Δύο από τα οκτώ primitive types χρησιμοποιούνται για δεκαδικούς αριθμούς: float και double.
  Η μόνη και βασική διαφορά ανάμεσά τους είναι το εύρος των αριθμών που μπορούν να καλύψουν αφού ένας float αριθμός περιγράφεται από 32 bits ενώ ένας double από 64 bits.
Στην προηγούμενη ενότητα είχαμε περιγράψει ότι η default συμπεριφορά της Java με τους ακέραιους αριθμούς ήταν να προσπαθήσει να τους μετατρέψει όλους σε int εκτός και αν βάλουμε το L στον τέλος του αριθμού χαρακτηρίζοντας τον σαν Long. Στους δεκαδικούς η default συμπεριφορά είναι το double data type. Αν θέλουμε να ορίσουμε έναν αριθμό να είναι float εκτός από το float data type μπροστά από το όνομα της μεταβλητής πρέπει να προσθέσουμε και ένα F στο τέλος του αριθμού. Γενικότερα το double είναι εκείνο που χρησιμοποιούμε πιο πολύ αφού έτσι και αλλιώς όλες οι μαθηματικές βιβλιοθήκες της Java χρησιμοποιούν και επιστρέφουν double αριθμούς.
Ας δούμε όμως ένα παράδειγμα στο οποίο μπορούμε να δούμε ξεκάθαρα την χρήση των δύο αυτών data types και που πρέπει να προσέχουμε όταν τα χρησιμοποιούμε σε αριθμητικές πράξεις.

 


Στο πιο πάνω πρόγραμμα, αν και δεν παρουσιάζει κανένα λάθος όσο αφορά την Java το αποτέλεσμα όμως είναι λάθος. Ας το αναλύσουμε γραμμή προς γραμμή και θα δούμε πως μπορούμε να το διορθώσουμε.

Ορίζουμε εξ αρχής δύο μεταβλητές pi και f με την pi να είναι double και την f να είναι float. Παρατηρήστε το F στο τέλος του αριθμού 2.7.
Αμέσως μετά τον ορισμό των μεταβλητών, απλά ζητάμε να δούμε τις τιμές που τους έχουμε αναθέσει στο default output.
Στην συνέχεια, ορίζουμε δύο int μεταβλητές την n και την d με τιμές 15 και 4 αντίστοιχα. Και στο επόμενο βήμα εκτελούμε την διαίρεση 15/4 και ζητάμε να δούμε το αποτέλεσμα στο terminal. Όμως παρατηρούμε ότι το αποτέλεσμα είναι λάθος. Τι έγινε? Η απάντηση είναι απλή: Η διαίρεση μεταξύ δύο int αριθμών μας δίνει αποτέλεσμα int δηλαδή 3. Επειδή όμως η μεταβλητή f έχει οριστεί σαν float, η Java πριν αναθέσει την int τιμή στην μεταβλητή f την μετατρέπει σε float. Οπότε το 3 μετατρέπεται σε 3.0. Για να λάβουμε το σωστό αποτέλεσμα πρέπει πολύ απλά να μετατρέψουμε τον ένα από τους δύο int σε float. Τότε αυτόματα ο δεύτερο int θα μετατραπεί σε float και αυτός και η διαίρεση θα μας δώσει το σωστό αποτέλεσμα όπως μας δείχνει το πιο κάτω παράδειγμα.

 



Στις δύο τελευταίες γραμμές του κώδικα απλά εκτελούμε την πράξη του πολλαπλασιασμού για να δούμε πως, για άλλη μια φορά, o int μετατράπηκε σε double και μετά έγινε η πράξη του πολλαπλασιασμού που μας δίνει το σωστό αποτέλεσμα.

Μιχάλης Κασάπογλου







































Archive

Contact Form

Send