Miklix

Convertiți un real în șir cu toate zecimale în Dynamics AX 2012

Publicat: 16 februarie 2025 la 10:40:52 UTC

În acest articol, explic cum să convertești un număr în virgulă mobilă într-un șir, păstrând în același timp toate zecimale în Dynamics AX 2012, inclusiv un exemplu de cod X++.


Această pagină a fost tradusă automat din limba engleză pentru a o face accesibilă cât mai multor persoane. Din păcate, traducerea automată nu este încă o tehnologie perfecționată, astfel încât pot apărea erori. Dacă preferați, puteți vizualiza versiunea originală în limba engleză aici:

Convert a Real to String with All Decimals in Dynamics AX 2012

Informațiile din această postare se bazează pe Dynamics AX 2012 R3. Poate fi valabil sau nu pentru alte versiuni.

Din când în când, trebuie să convertesc un număr real într-un șir. De obicei, este suficient să-l treci la strFmt(), dar acea funcție se rotunjește întotdeauna la două zecimale, ceea ce nu este întotdeauna ceea ce vreau.

Apoi există funcția num2str(), care funcționează bine, dar necesită să știți din timp câte zecimale și caractere doriți.

Ce se întâmplă dacă vrei doar ca numărul să fie convertit într-un șir, cu toate cifrele și zecimale? Din anumite motive, acesta este ceva care mă face mereu să caut pe Google, deoarece este surprinzător de obscur de făcut și o fac atât de rar încât de obicei nu-mi amintesc exact cum - în majoritatea limbajelor de programare, m-aș aștepta să poți concatena realul într-un șir gol, dar X++ nu acceptă asta.

Oricum, cel mai ușor mod pe care l-am găsit de a face acest lucru este folosind un apel .NET. Există mai multe opțiuni și aici, cu și fără opțiuni pentru formatare avansată, dar dacă doriți doar o conversie cu adevărat simplă a unui real într-un șir, aceasta va fi suficientă:

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

Dacă acest cod urmează să fie rulat pe AOS (de exemplu, într-o lucrare batch), nu uitați să afirmați mai întâi permisiunea de acces la cod necesară. În acest caz, veți avea nevoie de o InteropPermission de tip ClrInterop pentru a apela codul .NET, astfel încât exemplul de cod complet ar arăta cam așa:

new InteropPermission(InteropKind::ClrInterop).assert();
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();

Fiți conștienți de faptul că această funcție simplă System::Convert utilizează localitatea curentă a sistemului în ceea ce privește caracterul punct zecimal. Aceasta poate să nu fie o problemă pentru dvs., dar pentru mine, care locuiesc într-o zonă în care virgula este folosită mai degrabă decât punctul ca separator zecimal, ar putea necesita o prelucrare suplimentară dacă șirul, de exemplu, trebuie utilizat într-un fișier care trebuie să fie citit de alte sisteme.

Distribuie pe BlueskyDistribuie pe FacebookDistribuie pe LinkedInDistribuie pe TumblrDistribuie pe XDistribuie pe LinkedInPin pe Pinterest

Mikkel Bang Christensen

Despre autor

Mikkel Bang Christensen
Mikkel este creatorul și proprietarul miklix.com. El are peste 20 de ani de experiență ca programator de calculatoare/dezvoltator software profesionist și este în prezent angajat cu normă întreagă pentru o mare corporație europeană de IT. Atunci când nu scrie pe blog, își petrece timpul liber cu o gamă largă de interese, hobby-uri și activități, care se pot reflecta într-o anumită măsură în varietatea de subiecte abordate pe acest site.