![]() |
προβλημα με αρθοισμα καλησπέρα στο φορουμ εχω ενα θεμα που με απασχολει εδω και πολυ καιρο εχω φτιαξει μια βαση οπου καταχωρω τιμες απο τιμολογια για να δημιουργησω ενα δελτιο εισαγωγης αλλα περνοτας τις τιμες και κανοντας τις πραξεις ποτε δεν συμβαδιζουν με τις τιμες του τιμολογιου σχεδον παντα εχω αποκληση στο δευτερο δεκαδικο .... τι ρυθμισεις πρεπει να βαλω στα πεδια μου ωστε να κανει τις πραξεις οπως ενα κομπιουτερακι? |
Καλημέρα Γιάννη θα σου πρότειναα να στρογγυλεύεις τα αποτελέσματα στο πλησιέστερο εκατοστό (λεπτό). Για το σκοπό αυτό χρησιμοποίησε τη συνάρτηση Round(). Για παράδειγμα, αν το πεδίο [ΤΙΜΗ] έχει την τιμή ενός προϊόντος και το [ΦΠΑ] τον συντελεστή ΦΠΑ, για να βρούμε το αντίστοιχο ΦΠΑ, θα χρησιμοποιήσουμε τον τύπο: Round ([ΤΙΜΗ]*[ΦΠΑ];2) |
καλησπέρα γιώργο σε ευχαριστω παρα πολύ για την αμεση ανταποκριση στο ερώτημα μου αλλα φίλε μου το εχω δοκιμάσει αυτο με την round αλλα δεν εχω το επιθυμητό αποτέλεσμα .... σε ευχαριστώ παντως για το ενδιαφέρον σου.... έχεις να προτίνεις κάτι άλλο? https://drive.google.com/file/d/0B59...ew?usp=sharing https://drive.google.com/file/d/0B59...ew?usp=sharing παραθέτω μία είκονα απο το ερωτημα "ΠΑΡΑΛΑΒΗ" το γινομανο 5*2,753=13,765 οταν κανω την πραξη στην αριθμομηχανη οταν το κανω σε πεδιο υπολογισμου "katharitimi" μου δεινει γινομενο 5*2,753=13.76 το πεδιο υπολογισμού μου ειναι "=round(([ΠΟΣΟΤΗΤΑ ΠΑΡΑΛΑΒΗΣ]*[timimonados]);2) δεν θα επρεπε να μου κανει την στρογγυλοποίηση και να μου δωσει γινομενο 13,77.... τι λάθος κάνω?... |
Έχεις δίκιο, στη συγκεκριμένη περίπτωση, η συμπεριφορά της Round() δεν είναι σωστή. Αν θέλεις δοκίμασε το ίδιο στο Excel. Νομίζω δίνει σωστό αποτέλεσμα. Τελικά αντί της Round() δοκίμασε τον τύπο:=CInt(100*[ΠΟΣΟΤΗΤΑ ΠΑΡΑΛΑΒΗΣ]*[timimonados])/100, που επίσης στρογγυλεύει το αποτέλεσμα στο πλησιέστερο εκατοστό. |
γιώργο το ίδιο αποτελεσμα μου δεινει ακριβως το ίδιο αποτελεσμα με την round ... επίσης να πω οτι στο πίνακα που υπαρχουν τα πεδια "timimonados" εχει ιδιοτητες Μεγεθος πεδίου=δεκαδικός , Μορφή=Ευρώ, Ακρίβεια=4, κλιμακα=3, δεκαδικές θέσεις=3 . Το πεδίου "ΠΟΣΟΤΗΤΑ ΠΑΡΑΛΑΒΗΣ" Μέγεθος πεδιου=δεκαδικός, μορφη=βασική, ακριβεια=18 , κλίμακα=2 και δεκαδικές θέσεις=2..... μήπως κανω εκει κάποιο λάθος? με βασανιζει πανω απο μηνα αυτο |
Γιάννη, δεν μπορώ να σκεφτώ κάτι άλλο. |
Καλησπέρα. Η Round() έχει μια περίεργη λογική στην στρογγυλοποίηση για αριθμούς που τελειώνουν σε 5. Έτσι την ξεγελάμε προσθέτοντας κάτι μηδαμινό για να έχουμε στρογγυλοποίηση προς τα πάνω. Αυτό το μηδαμινό δεν πρέπει να σχετίζεται με την ακρίβεια που θέλουμε... Κάνε δοκιμές κάπως έτσι : ROUND(5*2.753+0.000000001,2) Αυτά φίλε μας / Νίκος |
Έχω τη γνώμη ότι η προσθήκη ενός μικρού αριθμού μπορεί να έχει άλλες παρενέργειες. Για παράδειγμα: round(13,344999999999;2) = 13,34. Ενώ round(13,344999999999 + 0,000000001;2)=13,35 |
χμ! Δεν νομίζω ότι η περίπτωση που συζητάμε μας εμπλέκει με αριθμούς με 7-8 δεκαδικά... Εξάλλου έγραψα ότι η τεχνική που προτείνω έχει να κάνει με την ακρίβεια. Να είσαι καλά φίλε μου Γιώργο. Νίκος |
Φίλε Νίκο να είσαι επίσης καλά. Προσθέτουμε τη μικρή ποσότητα για να μας δίνει η Round σωστό αποτέλεσμα σε κάποια οριακή περίπτωση. Η προσθήκη αυτή θα μας δώσει λάθος στην ακόλουθη επίσης οριακή περίπτωση. Αν ποσότητα μετά το δεύτερο δεκαδικό είναι μικρότερη αλλά πολύ κοντά στην τιμή 0,005 η μικρή προσαύξηση θα την κάνει >=0,005 και έτσι η Round θα επιστρέψει λάθος τιμή. |
γιώργο νίκο, ευχαριστώ παιδιά παρα πολυ για το ενδιαφερον σας.... να πω κατι εγώ .... αυτο το προβλημα που εχω αφορα μια βαση δεδομενων στην οποια καταχωρω τιμές προϊόντων απο τιμολογια τα οποια μου τα δεινουν οι προμηθευτες μου κι πρεπει εγώ να συνταξω ενα δελτιο και μια εκθεση για να εγκινω τις προμηθειες και να ισοσκελίζω στην βαση μου τις τιμες τιμολογιων ανα ειδος που αφορουν προμηθειες παιδικου σταθμου..... ναι με το να προσθεσω εναν δεκαδικο του τυπου "0,00000001" στο συγκεκριμενο τιμολογιο μου φερνει το επιθυμιτό αποτελεσμα, αλλα σε καποιο αλλο δεν υπαρχει ο κινδυνος να μου φερει λαθος αποτελεσμα? και στο exel που χτυπησα τα νουμερα μου εφερε αποκληση , εκει που δεν μου φερνει αποληση ειναι η αριθμομηχανη για αυτο ψαχνω το τροπο με τον οποιον σε access να μπορω να κανω πράξεις όπως σε μια αριθμομηχανη με την ίδια λογική δηλαδη….. παντως παιδια με το 0,00000001 δούλεψε μια χαρά η round τωρα αν εχω απόκλιση σε αλλα τιμολογια δεν ξερω ….πάντως ολόψυχα σας ευχαριστώ για το ενδιαφερον σας και την βοηθεια σας |
Καλημέρα. Παράθεση:
Αυτά Γιάννη / Νίκος Υστερολόγιο: Σε λίγες μέρες θα ξεκινήσω ένα πρόγραμμα-δίκτυο παιδικών σταθμών με κεντρική υπηρεσία του Δήμου. Θα υπάρχουν και λογιστικές διαχειρίσεις. Λοιπόν! Με την Round() θα εργαστώ. |
Γιάννη, νομίζω ότι θα πρέπει να ακολουθήσεις την πρόταση του Νίκου. Η περίπτωση να εμφανιστεί κάπου αλλού λάθος, χωρίς να αποκλείεται, είναι απίθανη. |
κι εγω κατι παρομοιο εχω κανει :) αυτο ήθελα για να το ολοκληρωσω εκει ήταν το κομημα μου τωρα ειναι ολοκληρωμενο :) |
Γιάννη δες την προηγούμενη πρόταση. Την τροποποίησα. |
καλησπερα γιωργο.... που να την δω φίλε? |
αυτο που εκανα σήμερα εγώ, γιώργο/νικο ήταν "=katharitimi: round(([ΠΟΣΟΤΗΤΑ ΠΑΡΑΛΑΒΗΣ]*[timimonados])+0,000000000001;2)" Και μου το εφερε μια χαρα σε οτι τιμολογιο παλιο ειχα περασμενο καθως και στα νεα που περασα σημερα ίδιο εκανα και στο πεδιο "ekptosiposo" γιατί κι εκει ειχα μια αποκληση και στρωσαν ολαααααααααααααα :thumbup::thanks: |
Παράθεση:
Μια λύση σε αυτό το πρόβλημα είναι: πολ/ζω με 1000 για στρογγυλοποίηση 2 δεκαδικών 13,344999999999*1000=13344,999999999 τον κάνω ακέραιο int(13,344999999999*1000)=13344 διαιρώ με 1000 int(13,344999999999*1000)/1000=13,344 και στρογγυλοποιώ προσθέτοντας μια μικρή ποσότητα πχ 0,000000001 round((int(13,344999999999*1000)/1000)+0,000000001)=13,34 Δηλαδή round((Int(([ΤΙΜΗ]*[ΦΠΑ])*1000))/1000+0,000000001;2) Επειδή (είχα ένα πρόβλημα παλιά με μέσους όρους) εγώ ξανακάνω την ίδια διαδικασία για δύο δεκαδικά πολ/ζοντας με 100 /ακέραιος/διαίρεση με 100 (το στρογγυλοποιημένο ποσό τώρα) Δηλαδή int(round((Int(([ΤΙΜΗ]*[ΦΠΑ])*1000))/1000+0,000000001;2)*100)/100 Ευχαριστώ και Χρόνια πολλά Δημήτρης |
| Η ώρα είναι 03:07. |
Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.