Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Φόρμες ] προβλημα με αρθοισμα (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/4638-problima-me-arthoisma.html)

johnioa 10-07-17 22:07

προβλημα με αρθοισμα
 
καλησπέρα στο φορουμ εχω ενα θεμα που με απασχολει εδω και πολυ καιρο εχω φτιαξει μια βαση οπου καταχωρω τιμες απο τιμολογια για να δημιουργησω ενα δελτιο εισαγωγης αλλα περνοτας τις τιμες και κανοντας τις πραξεις ποτε δεν συμβαδιζουν με τις τιμες του τιμολογιου σχεδον παντα εχω αποκληση στο δευτερο δεκαδικο .... τι ρυθμισεις πρεπει να βαλω στα πεδια μου ωστε να κανει τις πραξεις οπως ενα κομπιουτερακι?

kapetang 11-07-17 10:26

Καλημέρα

Γιάννη θα σου πρότειναα να στρογγυλεύεις τα αποτελέσματα στο πλησιέστερο εκατοστό (λεπτό).

Για το σκοπό αυτό χρησιμοποίησε τη συνάρτηση Round().

Για παράδειγμα, αν το πεδίο [ΤΙΜΗ] έχει την τιμή ενός προϊόντος και το [ΦΠΑ] τον συντελεστή ΦΠΑ, για να βρούμε το αντίστοιχο ΦΠΑ, θα χρησιμοποιήσουμε τον τύπο:

Round ([ΤΙΜΗ]*[ΦΠΑ];2)

johnioa 12-07-17 16:44

καλησπέρα γιώργο σε ευχαριστω παρα πολύ για την αμεση ανταποκριση στο ερώτημα μου αλλα φίλε μου το εχω δοκιμάσει αυτο με την 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.... τι λάθος κάνω?...

kapetang 13-07-17 18:07

Έχεις δίκιο, στη συγκεκριμένη περίπτωση, η συμπεριφορά της Round() δεν είναι σωστή.

Αν θέλεις δοκίμασε το ίδιο στο Excel. Νομίζω δίνει σωστό αποτέλεσμα.

Τελικά αντί της Round() δοκίμασε τον τύπο:=CInt(100*[ΠΟΣΟΤΗΤΑ ΠΑΡΑΛΑΒΗΣ]*[timimonados])/100, που επίσης στρογγυλεύει το αποτέλεσμα στο πλησιέστερο εκατοστό.

johnioa 13-07-17 18:55

γιώργο το ίδιο αποτελεσμα μου δεινει ακριβως το ίδιο αποτελεσμα με την round ... επίσης να πω οτι στο πίνακα που υπαρχουν τα πεδια "timimonados" εχει ιδιοτητες Μεγεθος πεδίου=δεκαδικός , Μορφή=Ευρώ, Ακρίβεια=4, κλιμακα=3, δεκαδικές θέσεις=3 . Το πεδίου "ΠΟΣΟΤΗΤΑ ΠΑΡΑΛΑΒΗΣ" Μέγεθος πεδιου=δεκαδικός, μορφη=βασική, ακριβεια=18 , κλίμακα=2 και δεκαδικές θέσεις=2..... μήπως κανω εκει κάποιο λάθος? με βασανιζει πανω απο μηνα αυτο

kapetang 13-07-17 21:55

Γιάννη, δεν μπορώ να σκεφτώ κάτι άλλο.

Meteora 13-07-17 22:08

Καλησπέρα.
Η Round() έχει μια περίεργη λογική στην στρογγυλοποίηση για αριθμούς που τελειώνουν σε 5. Έτσι την ξεγελάμε προσθέτοντας κάτι μηδαμινό για να έχουμε στρογγυλοποίηση προς τα πάνω. Αυτό το μηδαμινό δεν πρέπει να σχετίζεται με την ακρίβεια που θέλουμε...
Κάνε δοκιμές κάπως έτσι : ROUND(5*2.753+0.000000001,2)

Αυτά φίλε μας / Νίκος

kapetang 13-07-17 22:48

Έχω τη γνώμη ότι η προσθήκη ενός μικρού αριθμού μπορεί να έχει άλλες παρενέργειες.

Για παράδειγμα: round(13,344999999999;2) = 13,34.

Ενώ round(13,344999999999 + 0,000000001;2)=13,35

Meteora 13-07-17 22:55

χμ!
Δεν νομίζω ότι η περίπτωση που συζητάμε μας εμπλέκει με αριθμούς με 7-8 δεκαδικά... Εξάλλου έγραψα ότι η τεχνική που προτείνω έχει να κάνει με την ακρίβεια.

Να είσαι καλά φίλε μου Γιώργο. Νίκος

kapetang 13-07-17 23:09

Φίλε Νίκο να είσαι επίσης καλά.

Προσθέτουμε τη μικρή ποσότητα για να μας δίνει η Round σωστό αποτέλεσμα σε κάποια οριακή περίπτωση.

Η προσθήκη αυτή θα μας δώσει λάθος στην ακόλουθη επίσης οριακή περίπτωση.

Αν ποσότητα μετά το δεύτερο δεκαδικό είναι μικρότερη αλλά πολύ κοντά στην τιμή 0,005 η μικρή προσαύξηση θα την κάνει >=0,005 και έτσι η Round θα επιστρέψει λάθος τιμή.

johnioa 14-07-17 13:17

γιώργο νίκο, ευχαριστώ παιδιά παρα πολυ για το ενδιαφερον σας.... να πω κατι εγώ .... αυτο το προβλημα που εχω αφορα μια βαση δεδομενων στην οποια καταχωρω τιμές προϊόντων απο τιμολογια τα οποια μου τα δεινουν οι προμηθευτες μου κι πρεπει εγώ να συνταξω ενα δελτιο και μια εκθεση για να εγκινω τις προμηθειες και να ισοσκελίζω στην βαση μου τις τιμες τιμολογιων ανα ειδος που αφορουν προμηθειες παιδικου σταθμου..... ναι με το να προσθεσω εναν δεκαδικο του τυπου "0,00000001" στο συγκεκριμενο τιμολογιο μου φερνει το επιθυμιτό αποτελεσμα, αλλα σε καποιο αλλο δεν υπαρχει ο κινδυνος να μου φερει λαθος αποτελεσμα? και στο exel που χτυπησα τα νουμερα μου εφερε αποκληση , εκει που δεν μου φερνει αποληση ειναι η αριθμομηχανη για αυτο ψαχνω το τροπο με τον οποιον σε access να μπορω να κανω πράξεις όπως σε μια αριθμομηχανη με την ίδια λογική δηλαδη….. παντως παιδια με το 0,00000001 δούλεψε μια χαρά η round τωρα αν εχω απόκλιση σε αλλα τιμολογια δεν ξερω ….πάντως ολόψυχα σας ευχαριστώ για το ενδιαφερον σας και την βοηθεια σας

Meteora 14-07-17 13:50

Καλημέρα.
Παράθεση:

...αλλα σε καποιο αλλο δεν υπαρχει ο κινδυνος να μου φερει λαθος αποτελεσμα?
...μέχρι να βρεθεί μια πραγματική περίπτωση, ό,τι έχω προτείνει ισχύει. Αν οι αριθμητικές πράξεις γεννούν Ν δεκαδικά ψηφία, τότε η προσθήκη του 0,00...1, με τη μονάδα να βρίσκεται σε δεκαδική θέση Ν+1 είτε Ν+2 (;) τουλάχιστον, δεν θα σε δημιουργήσει πρόβλημα.
Αυτά Γιάννη / Νίκος

Υστερολόγιο: Σε λίγες μέρες θα ξεκινήσω ένα πρόγραμμα-δίκτυο παιδικών σταθμών με κεντρική υπηρεσία του Δήμου. Θα υπάρχουν και λογιστικές διαχειρίσεις. Λοιπόν! Με την Round() θα εργαστώ.

kapetang 14-07-17 13:50

Γιάννη, νομίζω ότι θα πρέπει να ακολουθήσεις την πρόταση του Νίκου.

Η περίπτωση να εμφανιστεί κάπου αλλού λάθος, χωρίς να αποκλείεται, είναι απίθανη.

johnioa 14-07-17 14:10

κι εγω κατι παρομοιο εχω κανει :) αυτο ήθελα για να το ολοκληρωσω εκει ήταν το κομημα μου τωρα ειναι ολοκληρωμενο :)

kapetang 14-07-17 14:23

Γιάννη δες την προηγούμενη πρόταση. Την τροποποίησα.

johnioa 14-07-17 14:35

καλησπερα γιωργο.... που να την δω φίλε?

johnioa 14-07-17 14:42

αυτο που εκανα σήμερα εγώ, γιώργο/νικο ήταν "=katharitimi: round(([ΠΟΣΟΤΗΤΑ ΠΑΡΑΛΑΒΗΣ]*[timimonados])+0,000000000001;2)" Και μου το εφερε μια χαρα σε οτι τιμολογιο παλιο ειχα περασμενο καθως και στα νεα που περασα σημερα ίδιο εκανα και στο πεδιο "ekptosiposo" γιατί κι εκει ειχα μια αποκληση και στρωσαν ολαααααααααααααα :thumbup::thanks:

dimmag 13-08-17 09:27

Παράθεση:

Αρχική Δημοσίευση από kapetang (Μήνυμα 26338)
Έχω τη γνώμη ότι η προσθήκη ενός μικρού αριθμού μπορεί να έχει άλλες παρενέργειες.

Για παράδειγμα: round(13,344999999999;2) = 13,34.

Ενώ round(13,344999999999 + 0,000000001;2)=13,35

Καλημέρα
Μια λύση σε αυτό το πρόβλημα είναι:
πολ/ζω με 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.


Search Engine Optimization by vBSEO 3.3.2