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

En aquest article, explico com convertir un nombre de coma flotant en una cadena tot conservant tots els decimals a 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 Dynamics AX 2012 R3. Pot ser vàlid o no per a altres versions.

De tant en tant, necessito convertir un nombre real en una cadena. En general, només passar-ho a strFmt() és suficient, però aquesta funció sempre s'arrodoneix a dos decimals, 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 voleu que el nombre es converteixi 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 obscur fer-ho i ho faig tan poques vegades que normalment no recordo exactament com; en la majoria dels llenguatges de programació, m'esperaria que pogués concatenar el real amb una cadena buida, però X++ no ho admet.

De totes maneres, la manera més senzilla que he trobat de fer-ho és mitjançant una trucada .NET. També hi ha diverses opcions aquí, amb i sense opcions de format avançat, però si només voleu la conversió realment senzilla d'un real a una cadena, n'hi haurà prou:

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

Si aquest codi s'ha d'executar a l'AOS (per exemple, en un treball per lots), recordeu d'afirmar primer el permís d'accés al codi necessari. En aquest cas, necessitareu un InteropPermission del tipus ClrInterop per trucar al codi .NET, de manera que l'exemple de codi complet es veuria com 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 respecte al caràcter de coma decimal. Pot ser que això no sigui un problema per a vostè, però per a mi, que visc en una zona on s'utilitza la coma en lloc del punt com a separador decimal, pot ser que requereixi un processament addicional si la cadena, per exemple, s'ha d'utilitzar en un fitxer que ha de ser llegible per altres sistemes.

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

Mikkel Bang Christensen

Sobre l'autor

Mikkel Bang 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.