Μετατροπή πραγματικού σε συμβολοσειρά με όλα τα δεκαδικά ψηφία στο Dynamics AX 2012
Δημοσιεύθηκε: 16 Φεβρουαρίου 2025 στις 10:40:28 π.μ. UTC
Σε αυτό το άρθρο, εξηγώ πώς μπορείτε να μετατρέψετε έναν αριθμό κινητής υποδιαστολής σε συμβολοσειρά, διατηρώντας παράλληλα όλα τα δεκαδικά ψηφία στο Dynamics AX 2012, συμπεριλαμβανομένου ενός παραδείγματος κώδικα X ++.
Convert a Real to String with All Decimals in Dynamics AX 2012
Οι πληροφορίες σε αυτήν την καταχώρηση βασίζεται στο Dynamics AX 2012 R3. Μπορεί να ισχύει ή να μην ισχύει για άλλες εκδόσεις.
Κάθε τόσο, πρέπει να μετατρέψω έναν πραγματικό αριθμό σε συμβολοσειρά. Συνήθως, αρκεί απλώς να το περάσετε στο strFmt(), αλλά αυτή η συνάρτηση στρογγυλοποιείται πάντα σε δύο δεκαδικά ψηφία, κάτι που δεν είναι πάντα αυτό που θέλω.
Στη συνέχεια, υπάρχει η συνάρτηση num2str(), η οποία λειτουργεί καλά, αλλά απαιτεί να γνωρίζετε εκ των προτέρων πόσα δεκαδικά ψηφία και χαρακτήρες θέλετε.
Τι γίνεται αν θέλετε απλώς ο αριθμός να μετατραπεί σε συμβολοσειρά, με όλα τα ψηφία και τα δεκαδικά ψηφία; Για κάποιο λόγο, αυτό είναι κάτι που πάντα με κάνει να γκουγκλάρω γιατί είναι εκπληκτικά σκοτεινό να το κάνω και το κάνω τόσο σπάνια που συνήθως δεν μπορώ να θυμηθώ ακριβώς πώς - στις περισσότερες γλώσσες προγραμματισμού, θα περίμενα ότι θα μπορούσατε απλώς να συνενώσετε το πραγματικό σε μια κενή συμβολοσειρά, αλλά η X ++ δεν το υποστηρίζει.
Τέλος πάντων, ο μακράν ευκολότερος τρόπος που έχω βρει για να το κάνω αυτό είναι χρησιμοποιώντας μια κλήση .NET. Υπάρχουν πολλές επιλογές και εδώ, με και χωρίς επιλογές για προηγμένη μορφοποίηση, αλλά αν θέλετε απλώς την πραγματικά απλή μετατροπή ενός πραγματικού σε μια συμβολοσειρά, αυτό αρκεί:
Εάν αυτός ο κώδικας πρόκειται να εκτελεστεί στο AOS (για παράδειγμα σε μια εργασία δέσμης), θυμηθείτε πρώτα να διεκδικήσετε το απαραίτητο δικαίωμα πρόσβασης κώδικα. Σε αυτήν την περίπτωση, θα χρειαστείτε ένα InteropPermission τύπου ClrInterop για να καλέσετε τον κώδικα .NET, οπότε το παράδειγμα πλήρους κώδικα θα μοιάζει κάπως έτσι:
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();
Λάβετε υπόψη ότι αυτή η απλή συνάρτηση System::Convert χρησιμοποιεί τις τρέχουσες τοπικές ρυθμίσεις του συστήματος σε σχέση με το χαρακτήρα υποδιαστολής. Αυτό μπορεί να μην είναι πρόβλημα για εσάς, αλλά για μένα που ζω σε μια περιοχή όπου χρησιμοποιείται κόμμα και όχι τελεία ως διαχωριστικό δεκαδικών, μπορεί να χρειαστεί περαιτέρω επεξεργασία εάν η συμβολοσειρά, για παράδειγμα, πρέπει να χρησιμοποιηθεί σε ένα αρχείο που πρέπει να είναι αναγνώσιμο από άλλα συστήματα.