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