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
Ostatnia aktualizacja: 12 stycznia 2026 08:50:54 UTC
W tym artykule wyjaśnię, jak przekonwertować liczbę zmiennoprzecinkową na ciąg znaków, zachowując 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ć aktualne 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 potrzebuję.
Następnie mamy funkcję num2str(), która działa dobrze, ale wymaga wcześniejszej wiedzy, ile cyfr po przecinku i znaków ma być użytych.
Co, jeśli chcesz po prostu przekonwertować liczbę na ciąg znaków, ze wszystkimi cyframi i ułamkami dziesiętnymi? Z jakiegoś powodu zawsze szukam w Google, bo jest to zaskakująco trudne do zrobienia, a robię to tak rzadko, że zazwyczaj 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 znaków, ale X++ tego nie obsługuje.
Tak czy inaczej, zdecydowanie najłatwiejszym sposobem, jaki znalazłem, jest użycie wywołania .NET. Tutaj również jest wiele opcji, z opcjami zaawansowanego formatowania i bez nich, ale jeśli zależy Ci tylko na naprawdę prostej konwersji liczby rzeczywistej na ciąg znaków, to wystarczy:
Jeśli ten kod ma zostać uruchomiony na platformie AOS (na przykład w zadaniu wsadowym), pamiętaj o uprzednim udzieleniu niezbędnych uprawnień dostępu do kodu. W takim przypadku do wywołania kodu .NET potrzebne będzie uprawnienie InteropPermission typu ClrInterop, 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żących ustawień regionalnych systemu w odniesieniu do znaku przecinka dziesiętnego. Dla Ciebie może to nie stanowić problemu, ale dla mnie, który mieszkam w regionie, gdzie jako separator dziesiętny używa się przecinka zamiast kropki, może to wymagać dalszego przetwarzania, na przykład jeśli ciąg znaków musi zostać użyty w pliku, który musi być czytelny dla innych systemów.
Dalsza lektura
Jeśli podobał Ci się ten wpis, mogą Cię zainteresować również poniższe sugestie:
- Usuwanie jednostki prawnej (kont firmowych) w systemie Dynamics AX 2012
- Korzystanie z zapytania w klasie kontraktu danych SysOperation w systemie Dynamics AX 2012
- Dynamics AX 2012 SysOperation Framework Szybki przegląd
