Miklix

Convertir un número real en una cadena con todos los decimales en Dynamics AX 2012

Publicado: 16 de febrero de 2025, 10:40:29 UTC
Última actualización: 12 de enero de 2026, 8:50:46 UTC

En este artículo, explico cómo convertir un número de punto flotante en una cadena conservando todos los decimales en Dynamics AX 2012, incluido un ejemplo de código X++.


Esta página ha sido traducida automáticamente del inglés para hacerla accesible al mayor número de personas posible. Lamentablemente, la traducción automática no es todavía una tecnología perfeccionada, por lo que pueden producirse errores. Si lo prefiere, puede consultar la versión original en inglés aquí:

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

La información de esta publicación se basa en Dynamics AX 2012 R3. Puede que no sea válida para otras versiones.

De vez en cuando, necesito convertir un número real en una cadena. Normalmente, basta con pasarlo a strFmt(), pero esa función siempre redondea a dos decimales, lo cual no siempre es lo que quiero.

Luego está la función num2str(), que funciona bien, pero requiere que sepas de antemano cuántos decimales y caracteres quieres.

¿Qué pasa si solo quieres convertir el número en una cadena, con todos los dígitos y decimales? Por alguna razón, esto es algo que siempre busco en Google, ya que es sorprendentemente complejo y lo hago tan pocas veces que no recuerdo exactamente cómo. En la mayoría de los lenguajes de programación, esperaría poder concatenar el valor real con una cadena vacía, pero X++ no lo permite.

De todos modos, la forma más sencilla que he encontrado para hacerlo es mediante una llamada .NET. También existen varias opciones, con y sin opciones de formato avanzado, pero si solo quieres una conversión muy sencilla de un valor real a una cadena, esto será suficiente:

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

Si este código se va a ejecutar en el AOS (por ejemplo, en un trabajo por lotes), recuerde primero habilitar el permiso de acceso al código necesario. En este caso, necesitará un InteropPermission de tipo ClrInterop para llamar al código .NET. El ejemplo de código completo sería similar a este:

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

Tenga en cuenta que esta sencilla función System::Convert utiliza la configuración regional actual del sistema con respecto al punto decimal. Esto puede no ser un problema para usted, pero para mí, que vivo en una zona donde se usa la coma en lugar del punto como separador decimal, podría requerir un procesamiento adicional si, por ejemplo, la cadena debe usarse en un archivo legible para otros sistemas.

Lectura adicional

Si te ha gustado esta publicación, puede que también te gusten estas sugerencias:


Compartir en BlueskyCompartir en FacebookCompartir en LinkedInCompartir en TumblrCompartir en XCompartir en LinkedInPin en Pinterest

Mikkel Christensen

Sobre el autor

Mikkel Christensen
Mikkel es el creador y propietario de miklix.com. Tiene más de 20 años de experiencia como programador informático profesional y desarrollador de software, y actualmente trabaja a tiempo completo para una gran empresa europea de TI. Cuando no está escribiendo en su blog, dedica su tiempo libre a una gran variedad de intereses, aficiones y actividades, que en cierta medida pueden verse reflejados en la variedad de temas tratados en este sitio web.