Miklix

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++.


Ta strona została przetłumaczona maszynowo z języka angielskiego, aby była dostępna dla jak największej liczby osób. Niestety, tłumaczenie maszynowe nie jest jeszcze dopracowaną technologią, więc mogą wystąpić błędy. Jeśli wolisz, możesz wyświetlić oryginalną angielską wersję tutaj:

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:

stringValue = System.Convert::ToString(realValue);

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:

new InteropPermission(InteropKind::ClrInterop).assert();
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:


Udostępnij na BlueskyUdostępnij na FacebookuUdostępnij na LinkedInUdostępnij na TumblrUdostępnij na XUdostępnij na LinkedInPrzypnij na Pintereście

Mikkel Christensen

O autorze

Mikkel Christensen
Mikkel jest twórcą i właścicielem miklix.com. Ma ponad 20-letnie doświadczenie jako profesjonalny programista komputerowy / programista oprogramowania i jest obecnie zatrudniony na pełny etat w dużej europejskiej korporacji IT. Kiedy nie bloguje, poświęca swój wolny czas na szeroki wachlarz zainteresowań, hobby i aktywności, co może w pewnym stopniu znaleźć odzwierciedlenie w różnorodności tematów poruszanych na tej stronie.