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