THMMY.gr

Ηλεκτρονικοί Υπολογιστές και Τεχνικά Θέματα => Java => Topic started by: aika on April 22, 2007, 16:58:06 pm



Title: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: aika on April 22, 2007, 16:58:06 pm
Πάλι εγώ (τι να κάνω, κουράστηκα να ψάχω όλη την ώρα και κατεφεύγω στο φόρουμ)
To ερώτημα είναι στον τίτλο. Κάνω πράξεις με double αλλά με ενδιαφέρει να κρατήσω μόνο το ακέραιο μέρος του αριθμού (γιατί μετά χρησιμοποιώ τη μεταβλητή για να ορίσω διάσταση πίνακα..)

Η παλιό java όμως μου βγάζει possible loss of precision error στον ακόλουθο κώδικα (γιατί νομίζω πως με την C++ δε θα χα τέτοιο πρόβλημα?)

double a=5/2;
a=(int)a;
int b=a;


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: Kat on April 22, 2007, 17:22:33 pm
Μου φαίνεται λογικό να συμβαίνει, γιατί πας να κάνεις cast double σε integer.

Ο σωστός τρόπος να το κάνεις νομίζω είναι με την Math.floor.

edit: σόρυ, όχι την floor, κάποια άλλη μέσα στο math, που να κρατά ακέραιο μέρος.

edit2: εντέλει πάλι βλακεία είπα, γιατί αυτή η μέθοδος που σου είπα δίνει double. Μία παρατήρηση στον κώδικά σου πάντως: ορίζεις  την μεταβλητή a σαν double και μετά της βάζεις μέσα integer. Γιατί δεν κάνεις απ'ευθείας int b = (int) a ή ίσως int b = a; Το δοκίμασες και δεν σου δουλεύει;


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: aika on April 22, 2007, 17:53:51 pm
Γιατί δεν κάνεις απ'ευθείας int b = (int) a

Ναι, αυτό είναι! Θενξ Κατ  :)

(μετά από τόσες ώρες στο pc κάπου τρως ένα κόλλημα βλέπετε... )


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: Johnny English on April 23, 2007, 13:13:06 pm
Νομίζω  πρέπει να μαζέψουμε τις απορίες της aika σε ένα τόπικ:

"Η διπλωματική της aika - Java Support" ή κάτι παρεμφερές :P


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: aika on April 23, 2007, 13:19:34 pm
lol, γιατί όχι! Μη σου πω και χωριστό φάκελο στο portal..


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: Megawatt on April 23, 2007, 13:22:17 pm
Νομίζω  πρέπει να μαζέψουμε τις απορίες της aika σε ένα τόπικ:

"Η διπλωματική της aika - Java Support" ή κάτι παρεμφερές :P
;D ;D ;D ;D ;D ;D ;D ;D


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: Krono on April 23, 2007, 15:50:10 pm
      Εγώ δεν κατάλαβα ποιό είναι το πρόβλημα. Το ακέραιο μέρος μπορείς να το κρατάς απ' ευθείας int α=(int)(5/2); . Νομίζω πως το επιτρέπει αυτό το type casting. Όχι;


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: JAs0n-X on April 23, 2007, 23:12:12 pm
ναι ! :P


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: elmaya on April 23, 2007, 23:37:28 pm
Πάλι εγώ (τι να κάνω, κουράστηκα να ψάχω όλη την ώρα και κατεφεύγω στο φόρουμ)
To ερώτημα είναι στον τίτλο. Κάνω πράξεις με double αλλά με ενδιαφέρει να κρατήσω μόνο το ακέραιο μέρος του αριθμού (γιατί μετά χρησιμοποιώ τη μεταβλητή για να ορίσω διάσταση πίνακα..)

Η παλιό java όμως μου βγάζει possible loss of precision error στον ακόλουθο κώδικα (γιατί νομίζω πως με την C++ δε θα χα τέτοιο πρόβλημα?)

double a=5/2;
a=(int)a;
int b=a;


Βασικά και στη C/C++ θα είχες το ίδιο πρόβλημα...
Τώρα επειδή η Kat σου τα λέει καλά δε θα πω τίποτα επ' αυτού. Υπάρχει όμως ένα λεπτό σημείο: το
Code:
double b = 5/2;
δίνει πάλι 2. Διαιρείς 2 integers οπότε το αποτέλεσμα είναι πάλι διαφορετικό μάλλον από αυτό που θα ήθελες. Κάνε τουλάχιστον ένα double.

Όσο για το type casting που λένε τα παιδιά έχουν δίκιο. Κάνει truncate τον double σε int, αλλά πάλι κρατάει 8 bytes αντί για 4 που ίσως ήθελες για τον int.

Γενικά επειδή δεν είμαι κανένας γκουρού της java και είναι και δική  μου απορία τώρα: Τι είναι πιο γρήγορο? Να κάνεις type casting ή να χρησιμοποιείς το ΑΡΙ για να το κάνεις. Πάντως σίγουρα καθαρότερος κώδικας σημαίνει λιγότερα λάθη στο μέλλον. Και το casting το αποφεύγω όπως ο διάολος το λιβάνι. Είναι σαν να σπέρνεις bugs.


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: Krono on April 23, 2007, 23:56:57 pm
Βέβαια έχεις δίκιο! double a=5/2; μας δίνει 2.0.
Αλλά γιατί τέτοια εμπάθεια με το type casting;
Βασικά aika, γιατί δεν δοκιμάζεις διάφορα παιχνιδάκια με τα type castings και να κάνεις print τα αποτελέσματα αντί να μας κάνεις να συζητάμε στο forum; Έτσι θα σου λυθούν οι απορίες! Άλλωστε το λέει και η Κινέζικη παροιμία "Δεν αρκεί να δόσεις στον πεινασμένο ένα ψάρι αλλά πρέπει να τον μάθεις να ψαρεύει!"
Έγραψα πάλι!  8)  ^lol^


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: elmaya on April 24, 2007, 00:05:16 am
Βέβαια έχεις δίκιο! double a=5/2; μας δίνει 2.0.
Αλλά γιατί τέτοια εμπάθεια με το type casting;

Δεν είναι εμπάθεια...απλά το έχω διαβάσει και το έχω ακούσει τόσες φορές ώστε να το χρησιμοποιώ μόνο όταν είναι απαραίτητο και το ανέφερα επειδή κολλάει και επειδή έτσι θα αποκτήσει και ένα νόημα το τόπικ :P


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: aika on April 24, 2007, 08:35:57 am

@Kronokid, η περίοδος της μαθητείας έχει τελειώσει...τώρα πεινάω και μάλιστα πολύ  :D


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: chggr005 on April 25, 2007, 09:52:21 am
Πάλι εγώ (τι να κάνω, κουράστηκα να ψάχω όλη την ώρα και κατεφεύγω στο φόρουμ)
To ερώτημα είναι στον τίτλο. Κάνω πράξεις με double αλλά με ενδιαφέρει να κρατήσω μόνο το ακέραιο μέρος του αριθμού (γιατί μετά χρησιμοποιώ τη μεταβλητή για να ορίσω διάσταση πίνακα..)
Αικα, η Αλεξάνδρεια έχει καμιά 20αριά βιβλία για java και 5-6 για Matlab. Γιατί δεν κατεβάζεις από εκεί για να μάθεις και να σου λυθούν οι απορίες? Το λέω αυτό διότι το τελευταίο διάστημα έχεις ανοίξει πολλά παρεμφερή τόπικ σχετικά με προβλήματα που αντιμετωπίζεις σε java ή/και Matlab.


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: Καμένος on April 25, 2007, 11:14:12 am
Ποιός ψάχνει τώρα...


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: aika on April 25, 2007, 15:27:19 pm

Xρήστο δες το παραπάνω ποστ μου  ::) Το φόρουμ έχει άμεση απόκριση και πάντα δίνει λύσεις! Γι αυτό θα σας κάνω και αφιέρωση.. ^wav^


Title: Re: Java-πώς κρατάω το ακέραιο μέρος ενός double?
Post by: xenia on April 25, 2007, 15:30:03 pm
Ούτως η άλλως aika δε θα τη διαβάσει κανείς :P