Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
ROUND Ζητούμενη ακρίβεια στρογγυλοποίηση
καλησπέρα στην υπέροχη κοινότητα , Θα ήθελα βοήθεια στο παρακάτω θέμα στρογγυλοποίησης. Παρόλο που έχει συζητηθεί δεν με καλύπτει στο ζητούμενο . Δηλαδή : Για παράδειγμα, θέλουμε να χρησιμοποιήσουμε 2 δεκαδικά ψηφία και το 402,4249346 να στρογγυλοποιηθεί σε 402,43 . Η χρήση της ROUNDUP μου δίνει το αποτέλεσμα αλλά μεταβάλλει λανθασμένα άλλες εγγραφές. ΠΧ 341,32255 στρογγυλοποιείται σε 341,33 αντί του ορθού 341,42 Επισυνάπτω παράδειγμα βάσης. Ευχαριστώ Γιώργος |
#2
| |||
| |||
Υπάρχει 1 θέμα "ερμηνείας" Καταρχας ρίξε μια ματιά στο επισυναπτόμενο 1ον ..Μην ονομάζεις τις εφαρμογές χρησιμοποιώντας δεσμευμενες λέξεις...ονομαζόντας την round.accdb...ουσιαστικά ακύρωσες την Round 2ον ... μην κόβεις τα ψηφία στα δεδομένα σου ...αστα όπως τα πέρασες και μετά στην παρουσίαση θα κάνεις το manipulation 3ον .. Δες το ερώτημα για δεις πως με την Round και αναλόγως πως θα κόψεις θα παρεις και το επιθυμητό αποτέλεσμα Τέλος σε όλες τις γλώσσες υπαρχουν προβλήματα "αριθμητικής αναπαράστασης" (δεν θυμάμαι τον όρο) Δηλ το 402,425....στρογγυλλοποιείται σε 402,42 (ΛΑΘΟΣ) αλλά εσωτερικά πρέπει να έχει αποθηκευτεί σαν 402,4249999999 |
#3
| |||
| |||
Ευχαριστώ Γιάννη, Με τη δεσμευτική ονομασία απορούσα γιατί μου ακύρωνε τη συνάρτηση. Όμως το ζητούμενο είναι η εφαρμογή της λογικής στρογγυλοποίησης δηλαδή το προτελευταίο αριθμητικό ψηφίο αυξάνει κατά 1 εάν το τελευταίο είμαι >4 κ.ο.κ έτσι ώστε στο 402, 425 το 2 πρέπει να γίνει τρία και το 5 να φύγει. καλή σου μέρα |
#4
| |||
| |||
Να πω την αλήθεια καποιες φορές μου έτυχαν κάποια "λαθάκια" αυτού του τύπου αλλά δεν είχε τύχει ποτέ να ασχοληθώ καθώς δεν με ενοχλούσαν Το κοίταξα όμως και εδώ έχει 2 λύσεις : https://www.techonthenet.com/access/...eric/round.php Μου άρεσε η "πονηρή" λύση του τύπου Κώδικας: Round(YourNumber+0,000001;1) EDIT: το πρόβλημα με την λανθασμένη στρογγυλοποίηση λέγεται Banker Rounding ...: https://stackoverflow.com/questions/...2-instead-of-3 Δες πως επηρεάζεται η ακρίβεια : Κώδικας: ?round(12.650000000000001 ,1) '12 Μηδενικά 12,6 ?round(12.65000000000001 ,1) '11 Μηδενικά 12,7 και δες πως πραγματικά αποθηκεύεται ο αριθμός σου: (και η διαφορά Double - Single) https://www.exploringbinary.com/floa...int-converter/ Κώδικας: 12.650000000000001 --> (Double) : 12.6500000000000003552713678800500929355621337890625 12.650000000000001 --> (Single) : 12.6499996185302734375 Κώδικας: 402.4249346 --> (Double) -->402.42493459999997185150277800858020782470703125 402.4249346 --> (Single) -->402.4249267578125 |
#5
| |||
| |||
Καλησπέρα στην παρέα Σε οριακές περιπτώσεις η προσθήκη ενός μικρού αριθμού μπορεί να προκαλέσει λάθος αλλού. Ένα παράδειγμα φαίνεται παρακάτω. x=402.4250000 z=402.4249999 ?round(x,2) 402,42 <-----λάθος (σωστό = 402,43) ?round(z,2) 402,42 <-------σωστό _____________________________ ?round(x+0.000001,2) 402,43 <-----σωστό ?round(z+0.000001,2) 402,43 <------λάθος (μη σωστή επιλογή μικροποσότητας) ----------------------------- ?round(x+0.0000001,2) 402,43 <-----σωστό ?round(z+0.0000001,2) 402,42 <----σωστό Συμπέρασμα Ανάλογα με τα δεδομένα μας, θα πρέπει να κάνουμε κάποιες δοκιμές στην επιλογή της μικροποσότητας, έτσι ώστε να λύνουμε το πρόβλημά μας χωρίς να δημιουργούμε αλλού προβλήματα. |
#6
| |||
| |||
Ευχαριστώ Γιάννη και Γιώργο
|
#7
| |||
| |||
Γιώργο να είσαι καλά και ελπίζω να καλύφτηκες.
|
#8
| |||
| |||
Καλησπέρα εγώ χρησιμοποιώ αυτόν τον τύπο Round_ok (x,n)= Round(Int(x * (10 ^ n + 1)) / (10 ^ n + 1) + 1 / (10 ^ n + 2), n) ειδικά για 2 δεκαδικά Round_ok (x,2)= Round(Int(x * 1000) / 1000+ 1 / 10000, 2) Φιλικά Δημήτρης |
#9
| |||
| |||
Καλησπέρα Δημήτρη Συγκρίνοντας το γενικό τύπο με τον τύπο για 2 δεκαδικά νομίζω ότι στο γενικό πρέπει να προστεθούν κάποιες παρενθέσεις. Συγκεκριμένα πιστεύω ότι πρέπει να γίνει: Round_ok (x,2)=Round(Int(x * (10 ^ (n + 1))) / (10 ^ (n + 1)) + 1 / (10 ^ (n + 2)), n) Παρακάτω βλέπουμε μια δοκιμή στο παράθυρο Immediate της VBA x=402.4250000 n=2 ?Round(Int(x * (10 ^ (n + 1))) / (10 ^ (n + 1)) + 1 / (10 ^ (n + 2)), n) 402,43 <---------------------σωστό ?round(x,2) 402,42 <---------------------λάθος |
#10
| |||
| |||
Παράθεση:
η φιλοσοφία είναι να αφήνω 1 παραπάνω δεκαδικό από όσα θέλω να στρογγυλοποιήσω και να προσθέτω μικροποσότητα και αν το προχωρήσουμε την χρειάζεται μόνο όταν το επόμενο ψηφίο του ψηφίου στρογγυλοποίησης είναι 5 και έπονται μηδενικά δηλ αν Int(x * (10 ^ (n + 1))) Mod 10 = 5 and (x -Int(x * (10 ^ (n + 1))) / (10 ^ (n + 1))) =0 γιατί τότε αν δεν κάνω λάθος δεν δουλεύει σωστά η round στην access Γενικά η Int(x * (10 ^ (n + 1))) / (10 ^ (n + 1)) είναι χρήσιμη να περιορίζουμε τα δεκαδικά ψηφία σίγουρα σε n. Ευχαριστώ |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
[Συναρτήσεις] Στρογγυλοποίηση αριθμών και σταθερό σε χχ,50 | BLOUMM | Excel - Ερωτήσεις / Απαντήσεις | 5 | 14-02-20 15:19 |
ΣΥΝΑΡΤΗΣΗ ROUND(ΣΤΡΟΓΓΥΛΕΜΕΝΗ) | smasak | Access - Ερωτήσεις / Απαντήσεις | 3 | 08-11-19 18:34 |
στρογγυλοποίηση στην πλησιέστερη δεκάδα | ΤΑΣΟΣ | Access - Ερωτήσεις / Απαντήσεις | 3 | 23-12-16 10:56 |
[Συναρτήσεις] Στρογγυλοποίηση αριθμών με προϋποθέσεις | Lefteris | Excel - Ερωτήσεις / Απαντήσεις | 4 | 16-05-11 11:51 |
[Συναρτήσεις] Συναρτηση για μεγαλυτερη ακριβεια υπολογισμων | chris1978 | Excel - Ερωτήσεις / Απαντήσεις | 3 | 08-12-10 02:03 |
Η ώρα είναι 07:34.