| Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#1
| |||
| |||
|
έχω έναν πίνακα με παραγγελίες, περιλαμβάνει την τιμή και την ποσότητα. Και τα 2 πεδία στον πίνακα είναι τύπου Number με field size single και 2 decimals. Σε μία εγγραφή έχω 3,7 στην ποσότητα και 13 στην τιμή. Όταν όμως σε κάποιο query υπολογίζω το γινόμενο μου εμφανίζει το αποτέλεσμα 48,1000022888184 αντί για 48,1. Ο μόνος τρόπος που έχω βρει για να το λύσω είναι να κάνω φορματ τα πεδία των αποτελεσμάτων να εμφανίζουν 2 δεκαδικά. Σε όλα τα νέα query όμως εμφανίζει το λάθος αποτέλεσμα χωρίς να καταλαβαίνω γιατί. Διέγραψα την εγγραφή και την έφτιαξα πάλι. Δεν αλλάζει τίποτα. Αφαίρεσα τελείως το προϊόν. Τίποτα. Όποτε προσθέτω μία νέα εγγραφή μου βγάζει λάθος τον υπολογισμό. προσθεσα νέα στήλη στον πίνακα την μετονόμασα και συνεχίζει να έχει το ίδιο πρόβλημα. ό,τι τιμή και να βάλω αν έχει δεκαδικά ο υπολογισμός βγαίνει λάθος ακόμα κι αν η ποσότητα είναι 1 π.χ. 1Χ2,4 = 2,40000009536743 έφτιαξα νέο πίνακα με τυχαίες τιμές το ίδιο. Για να μην τρελαθώ, έχεις κάποιος ιδέα γιατί συμβαίνει αυτό; |
|
#2
| |||
| |||
|
Καλημέρα Για την αποθήκευση των αριθμών στον υπολογιστή, χρησιμοποιούνται ακολουθίες των ψηφίων 0 και 1 (δυαδικό σύστημα). Επειδή οι ακολουθίες δεν μπορεί να έχουν άπειρα ψηφία (0, 1), υπάρχουν περιπτώσεις που οι αριθμοί δεν αποθηκεύονται με απόλυτη ακρίβεια, αλλά κατά προσέγγιση. Αυτό δημιουργεί προβλήματα, όπως αυτό που αναφέρεις. Στο σύνδεσμο: https://www.google.com/search?q=%CE%...hrome&ie=UTF-8 μπορείς να βρεις λεπτομέρειες. Οι προγραμματιστές γνωρίζουν το πρόβλημα και ανάλογα με την περίπτωση, το αντιμετωπίζουν. Στην περίπτωσή σου θα πρότεινα να δημιουργήσεις στον πίνακα ένα υπολογιζόμενο πεδίο με τη βοήθεια της συνάρτησης Round και να χρησιμοποιείς αυτό στα ερωτήματα. Δες το συνημμένο |
|
#3
| |||
| |||
|
Καταλαβαίνω αυτό που λες, είμαι μηχανικός πληροφορικής.Η ακρίβεια θα ήταν ένα προβλημα αν αποθήκευα έναν αριθμό με πολλά ψηφία π.χ. 3.478237832 και πολλαπλασίαζα πάλι με αριθμό πολλών ψηφίων. Εδώ όμως συζητάμε για 2 αριθμούς ο ένας με ένα δεκαδικό κι άλλος χωρίς δεκαδικό. Δεν μπορώ να καταλάβω πως το 1 Χ 2,4 π.χ. φέρνει αποτέλεσμα 2,39747683 Προφανώς θα μπορούσα να κάνω round αλλά δεν έχει λογική. |
|
#4
| ||||
| ||||
|
Καλημέρα Κώστα! Κατά κανόνα, δεν θα υπάρχει λάθος όταν το πλήθος των δεκαδικών ψηφίων ενός αριθμού δεν υπερβαίνει το 15. Ο αριθμός που λόγω μορφοποίησης (οπτικής στρογγυλοποίησης) του πεδίου εμφανίζεται ως 1,4 θα μπορούσε να είναι 1,399566255... που είναι και ο αριθμός που χρησιμοποιείται στους όποιους υπολογισμούς της εφαρμογής. Μπορείς να τροποποιήσεις τη μορφοποίηση των πεδίων που περιέχουν δεκαδικούς αριθμούς ώστε να βλέπεις τα ακριβή αποτελέσματα. Αν συμβαίνει κάτι άλλο ανέβασε μας ένα παράδειγμα για να το δούμε μαζί. Με εκτίμηση Τάσος
__________________ Ms-Office Development Team Ανάπτυξη επαγγελματικών εφαρμογών |
|
#5
| |||
| |||
|
το λάθος προκύπτει μόνο στον υπολογισμό. Οι τιμές περάστηκαν με το χέρι και προφανώς δεν πάτησα πάνω από 1 δεκαδικό. Επισυνάπτω 3 screenshot ο πίνακας (ολοκαίνουριος) με 2 πεδία single με 2 decimal places το query με τον πολλαπλασιασμό Το αποτέλεσμα του query με τις τιμές των πεδίων Θεωρώ γελοίο να πρέπει να βάζω round σε κάθε πολλαπλασιασμό που κάνω στη βάση αφού δεν θέλω ακρίβεια πάνω από 2 δεκαδικά το να μου φέρνει τιμή με 15 μηδενικά μετά το κόμμα λόγω του τύπου του πεδίου να το καταλάβω και να κάνω format, το να μου φέρνει όμως στο τέλος αριθμούς που δεν υφίστανται στον υπολογισμό δεν το καταλαβαίνω. |
|
#6
| |||
| |||
|
Αν έχουμε ένα δεκαδικό με λίγα δεκαδικά, δεν συνεπάγεται ότι θα αποθηκευτεί στον υπολογιστή με απόλυτη ακρίβεια. Ο αριθμός 0,1 για την ακριβή αποθήκευσή του, απαιτεί άπειρα ψηφία (0, 1) του δυαδικού συστήματος. Συνεπώς αν για την αποθήκευσή του χρησιμοποιήσω 64 θα αποθηκευτεί κατά προσέγγιση. Λεπτομέρειες για τα παραπάνω στο σύνδεσμο:https://courses.chemeng.ntua.gr/file...-errors_v1.pdf Στο προηγούμενο μήνυμα έβαλα λάθος σύνδεσμο. |
|
#7
| |||
| |||
| Παράθεση:
|
|
#8
| |||
| |||
|
Κώστα, αφού έλυσες το πρόβλημα όλα καλά. Εγώ, για σιγουριά, θα πρόσθετα στο πίνακα ένα πεδίο υπολογιζόμενο (αξία = Round(τιμή*ποσότητα;2) που υπολογίζεται μία μόνο φορά όταν καταχωρούμε τιμές στον πίνακα) και θα το χρησιμοποιούσα σε ερωτήματα φόρμες και άλλα αντικείμενα της Access. |
|
#9
| |||
| |||
| Παράθεση:
Ευχαριστώ πάντως. |
|
#10
| |||
| |||
|
Κώστα σημειώνω ότι, αν κάνουμε κάποιος λάθος στην τιμή ή την ποσότητα, μπορούμε να το διορθώσουμε στον πίνακα οπότε θα επαναϋπολογιστεί το υπολογιζόμενο πεδίο και η αλλαγή θα εφαρμοστεί και στα αντικείμενα που το χρησιμοποιούν. Φυσικά εσύ ξέρεις καλύτερα τις ανάγκες σου και εσύ θα επιλέξεις πως θα τις καλύψεις. Να είσαι καλά και καλή συνέχεια. |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [ Ερωτήματα ] Τι κάνω λάθος | anestaki | Access - Ερωτήσεις / Απαντήσεις | 18 | 25-04-15 19:50 |
| [ Πίνακες ] Υπολογισμός σε ερώτημα με βάση ημερομηνίες πο | parara | Access - Ερωτήσεις / Απαντήσεις | 4 | 13-02-14 11:04 |
| [ Ερωτήματα ] Υπολογισμός πεδίου σε ερώτημα | artchrist73 | Access - Ερωτήσεις / Απαντήσεις | 5 | 14-12-13 22:00 |
| Υπολογισμός σε ερώτημα | stavross | Access - Ερωτήσεις / Απαντήσεις | 7 | 14-11-12 10:46 |
| Λάθος σε κώδικα | ΤΖΙΜΗΣ | Access - Ερωτήσεις / Απαντήσεις | 2 | 17-10-11 11:34 |
Η ώρα είναι 13:28.



Αλλαγή σε γραμμικό τρόπο

