Convertir un réel en chaîne avec toutes les décimales dans Dynamics AX 2012
Publié : 16 février 2025 à 10 h 48 min 03 s UTC
Dans cet article, j’explique comment convertir un nombre à virgule flottante en chaîne tout en préservant toutes les décimales dans Dynamics AX 2012, y compris un exemple de code X ++.
Convert a Real to String with All Decimals in Dynamics AX 2012
Les informations contenues dans cet article sont basées sur Dynamics AX 2012 R3. Il peut ou non être valide pour d’autres versions.
De temps en temps, j’ai besoin de convertir un nombre réel en une chaîne. Habituellement, il suffit de le passer à strFmt() est suffisant, mais cette fonction s’arrondit toujours à deux décimales, ce qui n’est pas toujours ce que je veux.
Ensuite, il y a la fonction num2str(), qui fonctionne bien, mais qui nécessite que vous sachiez à l’avance combien de décimales et de caractères vous voulez.
Que se passe-t-il si vous voulez juste que le nombre soit converti en chaîne, avec tous les chiffres et décimales ? Pour une raison quelconque, c’est quelque chose qui m’a toujours googler parce que c’est étonnamment obscur à faire et je le fais si rarement que je ne me souviens généralement pas exactement comment - dans la plupart des langages de programmation, je m’attendrais à ce que vous puissiez simplement concaténer le réel à une chaîne vide, mais X ++ ne supporte pas cela.
Quoi qu’il en soit, le moyen de loin le plus simple que j’ai trouvé pour le faire est d’utiliser un appel .NET. Il existe également plusieurs options ici, avec et sans options de formatage avancé, mais si vous voulez juste la conversion vraiment simple d’un réel en une chaîne, cela suffira :
Si ce code doit être exécuté sur AOS (par exemple dans un traitement par lots), n’oubliez pas d’affirmer d’abord l’autorisation d’accès au code nécessaire. Dans ce cas, vous aurez besoin d’une InteropPermission de type ClrInterop pour appeler le code .NET, de sorte que l’exemple de code complet ressemblerait à ceci :
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();
Sachez que cette simple fonction System ::Convert utilise les paramètres régionaux actuels du système en ce qui concerne le caractère de point décimal. Ce n’est peut-être pas un problème pour vous, mais pour moi qui vit dans une zone où la virgule est utilisée plutôt que le point comme séparateur décimal, cela peut nécessiter un traitement supplémentaire si la chaîne par exemple doit être utilisée dans un fichier qui doit être lisible par d’autres systèmes.