Konwersja wartości rzeczywistej na ciąg ze wszystkimi miejscami dziesiętnymi w systemie Dynamics AX 2012
Opublikowano: 16 lutego 2025 10:40:47 UTC
W tym artykule wyjaśnię, jak przekonwertować liczbę zmiennoprzecinkową na ciąg znaków, zachowując jednocześnie wszystkie miejsca dziesiętne w systemie Dynamics AX 2012, podając także przykład kodu X++.
Convert a Real to String with All Decimals in Dynamics AX 2012
Informacje zawarte w tym poście dotyczą systemu Dynamics AX 2012 R3. Mogą być lub nie być ważne dla innych wersji.
Od czasu do czasu muszę przekonwertować liczbę rzeczywistą na ciąg znaków. Zazwyczaj wystarczy przekazać ją do strFmt(), ale ta funkcja zawsze zaokrągla do dwóch miejsc po przecinku, co nie zawsze jest tym, czego chcę.
Następnie mamy funkcję num2str(), która działa dobrze, ale wymaga wcześniejszej wiedzy, ile miejsc po przecinku i znaków chcesz uzyskać.
A co, jeśli chcesz po prostu przekonwertować liczbę na ciąg, ze wszystkimi cyframi i miejscami dziesiętnymi? Z jakiegoś powodu zawsze szukam w Google, ponieważ jest to zaskakująco trudne do zrobienia i robię to tak rzadko, że zwykle nie pamiętam dokładnie jak — w większości języków programowania spodziewałbym się, że można po prostu połączyć liczbę rzeczywistą z pustym ciągiem, ale X++ tego nie obsługuje.
W każdym razie, zdecydowanie najłatwiejszym sposobem, jaki znalazłem, aby to zrobić, jest użycie wywołania .NET. Tutaj również jest wiele opcji, z opcjami zaawansowanego formatowania i bez nich, ale jeśli chcesz po prostu naprawdę prostej konwersji rzeczywistej na ciąg, to wystarczy:
Jeśli ten kod ma być uruchomiony na AOS (na przykład w zadaniu wsadowym), pamiętaj, aby najpierw potwierdzić niezbędne uprawnienia dostępu do kodu. W tym przypadku będziesz potrzebować InteropPermission typu ClrInterop, aby wywołać kod .NET, więc pełny przykład kodu wyglądałby mniej więcej tak:
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();
Należy pamiętać, że ta prosta funkcja System::Convert używa bieżącej lokalizacji systemu w odniesieniu do znaku kropki dziesiętnej. Dla Ciebie może to nie być problemem, ale dla mnie, który mieszkam w obszarze, w którym jako separator dziesiętny używa się przecinka, a nie kropki, może to wymagać dalszego przetwarzania, jeśli na przykład ciąg musi zostać użyty w pliku, który musi być czytelny dla innych systemów.