Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > ROUND Ζητούμενη ακρίβεια στρογγυλοποίηση

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 16-02-22, 21:00
Όνομα: ΓΙΩΡΓΗΣ
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 20-05-2013
Μηνύματα: 147
Προεπιλογή ROUND Ζητούμενη ακρίβεια στρογγυλοποίηση

καλησπέρα στην υπέροχη κοινότητα ,
Θα ήθελα βοήθεια στο παρακάτω θέμα στρογγυλοποίησης. Παρόλο που έχει συζητηθεί δεν με καλύπτει στο ζητούμενο . Δηλαδή :
Για παράδειγμα, θέλουμε να χρησιμοποιήσουμε 2 δεκαδικά ψηφία και το 402,4249346
να στρογγυλοποιηθεί σε 402,43 . Η χρήση της ROUNDUP μου δίνει το αποτέλεσμα αλλά μεταβάλλει λανθασμένα άλλες εγγραφές. ΠΧ 341,32255 στρογγυλοποιείται σε 341,33 αντί του ορθού 341,42 Επισυνάπτω παράδειγμα βάσης.
Ευχαριστώ

Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: accdb round.accdb (432,0 KB, 7 εμφανίσεις)
Απάντηση με παράθεση
  #2  
Παλιά 17-02-22, 11:01
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 08-12-2020
Μηνύματα: 153
Προεπιλογή

Υπάρχει 1 θέμα "ερμηνείας"
Καταρχας ρίξε μια ματιά στο επισυναπτόμενο
1ον ..Μην ονομάζεις τις εφαρμογές χρησιμοποιώντας δεσμευμενες λέξεις...ονομαζόντας την round.accdb...ουσιαστικά ακύρωσες την Round
2ον ... μην κόβεις τα ψηφία στα δεδομένα σου ...αστα όπως τα πέρασες και μετά στην παρουσίαση θα κάνεις το manipulation
3ον .. Δες το ερώτημα για δεις πως με την Round και αναλόγως πως θα κόψεις θα παρεις και το επιθυμητό αποτέλεσμα
Τέλος σε όλες τις γλώσσες υπαρχουν προβλήματα "αριθμητικής αναπαράστασης" (δεν θυμάμαι τον όρο)
Δηλ το 402,425....στρογγυλλοποιείται σε 402,42 (ΛΑΘΟΣ) αλλά εσωτερικά πρέπει να έχει αποθηκευτεί σαν 402,4249999999
Συνημμένα Αρχεία
Τύπος Αρχείου: accdb roundProject.accdb (432,0 KB, 6 εμφανίσεις)
Απάντηση με παράθεση
  #3  
Παλιά 17-02-22, 11:39
Όνομα: ΓΙΩΡΓΗΣ
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 20-05-2013
Μηνύματα: 147
Προεπιλογή

Ευχαριστώ Γιάννη, Με τη δεσμευτική ονομασία απορούσα γιατί μου ακύρωνε τη συνάρτηση. Όμως το ζητούμενο είναι η εφαρμογή της λογικής στρογγυλοποίησης δηλαδή το προτελευταίο αριθμητικό ψηφίο αυξάνει κατά 1 εάν το τελευταίο είμαι >4 κ.ο.κ έτσι ώστε στο 402, 425 το 2 πρέπει να γίνει τρία και το 5 να φύγει.
καλή σου μέρα
Απάντηση με παράθεση
  #4  
Παλιά 17-02-22, 12:42
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2016
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 08-12-2020
Μηνύματα: 153
Προεπιλογή

Να πω την αλήθεια καποιες φορές μου έτυχαν κάποια "λαθάκια" αυτού του τύπου αλλά δεν είχε τύχει ποτέ να ασχοληθώ καθώς δεν με ενοχλούσαν
Το κοίταξα όμως και εδώ έχει 2 λύσεις : https://www.techonthenet.com/access/...eric/round.php
Μου άρεσε η "πονηρή" λύση του τύπου
Κώδικας:
Round(YourNumber+0,000001;1)
Μπορεί να είναι τρελλά μπακάλικη αλλά δουλεύει γιατί προσπερνάει το πιο πάνω πρόβλημα με την "ορθή" αποθήκευση δεκαδικών αριθμών.... (και μην νομίζεις ότι κάτι ανάλογο δεν θα χρησιμοποείται ακόμα και απο πιο "High End" λύσεις)
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
EDIT2 : Βρήκα πως λέγεται αυτό το "πρόβλημα" :Αριθμοί Κινητής Υποδιαστολής https://www.cs.uoi.gr/~tsiatouhas/PLY307-CA/AppxB.pdf
και δες πως πραγματικά αποθηκεύεται ο αριθμός σου: (και η διαφορά 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
Οπότε λίγο πολύ τα αποτελέσματα απο την πλευρά της Access και γενικώς οποιοδήποτε Υπολογιστή είναι σωστά
Απάντηση με παράθεση
  #5  
Παλιά 17-02-22, 14:08
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα στην παρέα

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

Ένα παράδειγμα φαίνεται παρακάτω.

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  
Παλιά 18-02-22, 12:48
Όνομα: ΓΙΩΡΓΗΣ
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 20-05-2013
Μηνύματα: 147
Προεπιλογή

Ευχαριστώ Γιάννη και Γιώργο
Απάντηση με παράθεση
  #7  
Παλιά 18-02-22, 15:19
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Γιώργο να είσαι καλά και ελπίζω να καλύφτηκες.
Απάντηση με παράθεση
  #8  
Παλιά 18-02-22, 18:02
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 21-07-2010
Μηνύματα: 98
Προεπιλογή

Καλησπέρα
εγώ χρησιμοποιώ αυτόν τον τύπο

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  
Παλιά 19-02-22, 00:26
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα Δημήτρη

Συγκρίνοντας το γενικό τύπο με τον τύπο για 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  
Παλιά 19-02-22, 09:38
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2003
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 21-07-2010
Μηνύματα: 98
Προεπιλογή

Παράθεση:
Αρχική Δημοσίευση από kapetang Εμφάνιση μηνυμάτων
Καλησπέρα Δημήτρη

Συγκρίνοντας το γενικό τύπο με τον τύπο για 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 <---------------------λάθος
Σωστό για τις παρενθέσεις το έγραψα βιαστικά
η φιλοσοφία είναι να αφήνω 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.
Ευχαριστώ
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός 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.