Razer_greece Δημοσ. 6 Νοεμβρίου 2015 Δημοσ. 6 Νοεμβρίου 2015 Καλησπέρα, Καταρχάς είμαι αρχάριος στον προγραμματισμό οπότε το πρόβλημα μπορεί να σας φανεί γελοίο. Λίγα λόγια για το πρόβλημα. Η τιμή ενός εισιτηρίου είναι 4.9 ευρώ. Όπως βλέπετε στο terminal (στην φωτογραφία) και στις 2 περιπτώσεις το ποσό που δίνουμε είναι 11 ευρώ. Το 60.99999998 στην 1η περίπτωση είναι τα ρέστα που θα δοθούν επί 10 (Κανονικά θα έπρεπε να είναι 61). Στην 2η περίπτωση είναι κανονικά 61. Στην 1η περίπτωση λοιπόν καθώς η java στρογγυλοποιεί προς το κάτω χάνονται 10 cents. Το 0 (στην 1η περίπτωση) και το 1 (στην 2η περίπτωση) που εμφανίζονται ανάμεσα στα prints "You have change" είναι οι τιμές μιας μεταβλητής που καθορίζουν αν θα δοθούν ρέστα (στο συγκεκριμένο σημείο τα 10 cents). http://prntscr.com/8zo1xz (φωτογραφία terminal) Το πρόβλημα προφανώς είναι στο πως εισάγονται οι τιμές. Αξίζει να αναφέρω πως το 0 και το 1 καθορίζονται από αυτή την εντολή: Αφού βγάλω το πόσα ρέστα πρέπει να δοθούν ακολουθούν οι 2 παρακάτω εντολές που καθορίζουν τα νομίσματα που θα δοθούν (αλγόριθμος βελτιστοποίησης όπου πρέπει να δοθούν τα λιγότερα δυνατά) Resta *= 10; double z = (int) Resta / 50; (50 για 5 ευρώ, 20 για 2 ευρώ κοκ) Ελπίζω να σας κάλυψα και να μπορείτε να με βοηθήσετε!
Newbie18 Δημοσ. 7 Νοεμβρίου 2015 Δημοσ. 7 Νοεμβρίου 2015 αν καταλαβα καλα το θεμα σου ειναι η στρογγυλοποιηση που γινεται προς τα κατω? αν το θεμα σου ειναι αυτο χρησιμοποιησε την μεθοδο round και η στρογγυλοποιηση θα παει στο 70... αν το θεμα σου ειναι οτι γινεται στρογγυλοποιηση ενω δεν θες, τοτε σημαινει οτι τα εχεις δηλωσει int αλλαξε την δηλωση σε double και θα φτιαξει.. αν παλι δεν καταλαβα καλα ξανα εξηγησε μου κ αμα μπορω θα σε βοηθησω
Razer_greece Δημοσ. 7 Νοεμβρίου 2015 Μέλος Δημοσ. 7 Νοεμβρίου 2015 Ουσιαστικά το πρόβλημα που θέλω να λύσω είναι αυτό: 5+2+1+0.5+0.2+0.2+0.1 = 8.9999999 5+2+1+1 = 9 Στην java όταν εισάγω ακέραιους στην πρόσθεση θα μου δώσει το 9. Όταν εισάγω και δεκαδικούς παρόλο που το άθροισμα είναι 9 θα μου δώσει 8.99999999 και θα αλλάξει όλο το πρόγραμμα μου έτσι
Newbie18 Δημοσ. 7 Νοεμβρίου 2015 Δημοσ. 7 Νοεμβρίου 2015 τους δεκαδικους τους δηλωνεις float ή double?
Aztec Δημοσ. 7 Νοεμβρίου 2015 Δημοσ. 7 Νοεμβρίου 2015 Χρησιμοποίησε μόνο integer στο προγραμα σου εχωντας ολα τα ποσα σε cents Η χρηση Bigdecimal ειναι μια ακομα επιλογη
defacer Δημοσ. 7 Νοεμβρίου 2015 Δημοσ. 7 Νοεμβρίου 2015 Ουσιαστικά το πρόβλημα που θέλω να λύσω είναι αυτό: 5+2+1+0.5+0.2+0.2+0.1 = 8.9999999 5+2+1+1 = 9 Στην java όταν εισάγω ακέραιους στην πρόσθεση θα μου δώσει το 9. Όταν εισάγω και δεκαδικούς παρόλο που το άθροισμα είναι 9 θα μου δώσει 8.99999999 και θα αλλάξει όλο το πρόγραμμα μου έτσι http://floating-point-gui.de/ Εϊτε θα κάνεις round μετά την πρόσθεση σε κάποιο λογικό επίπεδο ακρίβειας, το οποίο θα δουλέψει σχεδόν σε όλες τις περιπτώσεις, είτε BigDecimal.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα