Λοιπόν, δεν υπάρχει πιο εκνευριστικό πράγμα από το να ψάχνεις για κάτι απλό και να μην το βρίσκεις. Αυτή η standard library έχει ένα σωρό συναρτήσεις και κάτι απλό όσο μια στρογγυλοποίηση δεν δέησε κανένας επιτέλους να την ενσωματώσει;
Μα καλά με τα νεύρα μου (μας) παίζουν;
Εντάξει δεν είναι και τόσο δύσκολο να φτιαχτεί, αλλά θα μπορούσε να υπάρχει έτοιμη και ίσως να την πείραζαν λίγο ώστε να είναι και γρήγορη.
Λοιπόν, μιας και πέρασαν κάποιες μέρες από τότε που την έψαχνα και δεν την έβρισκα, και έχω πλέον ηρεμήσει, (γιατί βάραγα το κεφάλι μου στον τοίχο επειδή ήμουν σίγουρος ότι υπήρχε και απλώς δεν την έβλεπα), μπορώ να σας βεβαιώσω ότι πιο εύκολα θα βρείτε κάτι ψάχνωντας στο internet παρά στον δίσκο σας. Αλλά για να μην ψάχνετε άλλο αφού φτάσατε ώς εδώ, πάρτε τον κώδικα από εδώ:
#include <cmath> typedef signed __int64 LONGLONG; typedef unsigned __int64 ULONGLONG; static ULONGLONG POWERS[] = { 1, 10, 100, 1E3, 1E4, 1E5, 1E6, 1E7, 1E8, 1E9, 1E10, 1E11, 1E12, 1E13, 1E14, 1E15, 1E16, 1E17, 1E18, 1E19 }; double Round(double dVal) { if(dVal < 0.0) return ceil(dVal - 0.5); else return floor(dVal + 0.5); } double Round(double dVal, short iPrec) { ULONGLONG power; if (iPrec == 0) return Round(dVal); if (iPrec < 0) { power = POWERS[-iPrec]; if(dVal < 0.0) return (ceil(dVal / power - 0.5) * power); else return (floor(dVal / power + 0.5) * power); } //iPrec > 0 power = POWERS[iPrec]; if(dVal < 0.0) return (ceil(dVal * power - 0.5) / power); else return (floor(dVal * power + 0.5) / power); }
Καλό θα είναι να έχετε υπόψη σας ότι η στρογγυλοποίηση με αυτή την υλοποίηση μπορεί να παίξει (θεωρητικά πάντα λόγω της μορφής με την οποία αποθηκεύονται οι doubles) στο διάστημα [-19, 19]. Στην πράξη άντε να χρειαστείτε στρογγυλοποίηση στο 2ο, 3ο, άντε 4ο δεκαδικό ψηφίο, για παραπάνω αμφιβάλλω.
Διαβάζοντας το post αυτό ένιωσα επιτέλους ότι δεν είμαι ο μόνος ” (γιατί βάραγα το κεφάλι μου στον τοίχο επειδή ήμουν σίγουρος ότι υπήρχε και απλώς δεν την έβλεπα)”.
με βοήθησες πολύ! ..thanks!