Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

 

Καταρχάς είμαι αρχάριος στον προγραμματισμό οπότε το πρόβλημα μπορεί να σας φανεί γελοίο. 

Λίγα λόγια για το πρόβλημα. Η τιμή ενός εισιτηρίου είναι 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 ευρώ κοκ)

 

 

Ελπίζω να σας κάλυψα και να μπορείτε να με βοηθήσετε!

Δημοσ.

αν καταλαβα καλα το θεμα σου ειναι η στρογγυλοποιηση που γινεται προς τα κατω? αν το θεμα σου ειναι αυτο χρησιμοποιησε την μεθοδο  round και η στρογγυλοποιηση θα παει στο 70... αν το θεμα σου ειναι οτι γινεται στρογγυλοποιηση ενω δεν θες, τοτε σημαινει οτι τα εχεις δηλωσει int αλλαξε την δηλωση σε double και θα φτιαξει.. αν παλι δεν καταλαβα καλα ξανα εξηγησε μου κ αμα μπορω θα σε βοηθησω :P 

Δημοσ.

Ουσιαστικά το πρόβλημα που θέλω να λύσω είναι αυτό:

 

5+2+1+0.5+0.2+0.2+0.1 = 8.9999999

5+2+1+1 = 9 

 

Στην java όταν εισάγω ακέραιους στην πρόσθεση θα μου δώσει το 9. Όταν εισάγω και δεκαδικούς παρόλο που το άθροισμα είναι 9 θα μου δώσει 8.99999999 και θα αλλάξει όλο το πρόγραμμα μου έτσι

Δημοσ.

Χρησιμοποίησε μόνο integer στο προγραμα σου εχωντας ολα τα ποσα σε cents

 

Η χρηση Bigdecimal ειναι μια ακομα επιλογη

Δημοσ.

Ουσιαστικά το πρόβλημα που θέλω να λύσω είναι αυτό:

 

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.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...