Miklix

Converteix un real a cadena amb tots els decimals al Dynamics AX 2012

Publicat: 5 de març del 2025, a les 19:29:54 UTC
Última actualització: 12 de gener del 2026, a les 8:52:52 UTC

En aquest article, explico com convertir un nombre de coma flotant en una cadena conservant tots els decimals al Dynamics AX 2012, inclòs un exemple de codi X++.


Aquesta pàgina es va traduir automàticament de l'anglès per tal de fer-la accessible al màxim de persones possible. Malauradament, la traducció automàtica encara no és una tecnologia perfeccionada, de manera que es poden produir errors. Si ho prefereixes, pots veure la versió original en anglès aquí:

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

La informació d'aquesta publicació es basa en el Dynamics AX 2012 R3. Pot ser vàlida o no per a altres versions.

De tant en tant, necessito convertir un nombre real en una cadena. Normalment, només cal passar-ho a strFmt() perquè no hi hagi res més, però aquesta funció sempre arrodoneix a dos decimals, cosa que no sempre és el que vull.

Després hi ha la funció num2str(), que funciona bé, però requereix que sàpigues amb antelació quants decimals i caràcters vols.

Què passa si només vols el número convertit en una cadena, amb tots els dígits i decimals? Per alguna raó, això és una cosa que sempre em fa buscar a Google perquè és sorprenentment difícil de fer i ho faig tan poques vegades que normalment no recordo exactament com; a la majoria de llenguatges de programació, esperaria que simplement poguessis concatenar el real a una cadena buida, però X++ no ho admet.

De tota manera, la manera més fàcil que he trobat per fer-ho és mitjançant una crida .NET. També hi ha diverses opcions, amb i sense opcions de formatació avançada, però si només voleu la conversió realment senzilla d'un real a una cadena, això serà suficient:

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

Si aquest codi s'ha d'executar a l'AOS (per exemple, en una tasca per lots), recordeu que primer heu d'afirmar el permís d'accés al codi necessari. En aquest cas, necessitareu un InteropPermission de tipus ClrInterop per cridar codi .NET, de manera que l'exemple de codi complet tindria un aspecte semblant a aquest:

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

Tingueu en compte que aquesta senzilla funció System::Convert utilitza la configuració regional actual del sistema pel que fa al caràcter del punt decimal. Potser això no és un problema per a vosaltres, però per a mi, que visc en una zona on s'utilitza una coma en lloc d'un punt com a separador decimal, pot requerir un processament addicional si, per exemple, la cadena s'ha d'utilitzar en un fitxer que ha de ser llegible per altres sistemes.

Lectures addicionals

Si t'ha agradat aquesta publicació, també et poden agradar aquests suggeriments:


Comparteix a BlueskyComparteix a FacebookComparteix a LinkedInComparteix a TumblrComparteix a XComparteix a LinkedInPin a Pinterest

Mikkel Christensen

Sobre l'autor

Mikkel Christensen
Mikkel és el creador i propietari de miklix.com. Té més de 20 anys d'experiència com a programador/desenvolupador de programari informàtic professional i actualment treballa a temps complet per a una gran corporació informàtica europea. Quan no fa blocs, dedica el seu temps lliure a una gran varietat d'interessos, aficions i activitats, que fins a cert punt es poden reflectir en la varietat de temes tractats en aquest lloc web.