Miklix

Convertir un nombre réel en chaîne avec toutes les décimales dans Dynamics AX 2012

Publié : 16 février 2025 à 10:40:32 UTC
Dernière mise à jour : 12 janvier 2026 à 08:50:48 UTC

Dans cet article, j'explique comment convertir un nombre à virgule flottante en une chaîne de caractères tout en préservant toutes les décimales dans Dynamics AX 2012, avec un exemple de code X++.


Cette page a été traduite de l'anglais afin de la rendre accessible au plus grand nombre. Malheureusement, la traduction automatique n'est pas encore une technologie parfaite, et des erreurs peuvent donc se produire. Si vous préférez, vous pouvez consulter la version originale en anglais ici :

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. Elles peuvent ne pas être valides pour d'autres versions.

De temps en temps, j'ai besoin de convertir un nombre réel en chaîne de caractères. En général, il suffit de le passer à la fonction strFmt(), mais cette fonction arrondit toujours à deux décimales, ce qui ne me convient pas toujours.

Il y a ensuite la fonction num2str(), qui fonctionne bien, mais qui nécessite de connaître à l'avance le nombre de décimales et de caractères souhaités.

Et si vous vouliez simplement convertir le nombre en une chaîne de caractères, avec tous les chiffres et les décimales ? Pour une raison qui m’échappe, je fais toujours des recherches sur Google à ce sujet, car c’est étonnamment obscur et je le fais si rarement que je ne me souviens généralement plus exactement comment faire. Dans la plupart des langages de programmation, je m’attendrais à ce qu’il suffise de concaténer le nombre réel à une chaîne vide, mais X++ ne le permet pas.

En tout cas, la méthode de loin la plus simple que j'ai trouvée consiste à utiliser un appel .NET. Plusieurs options sont disponibles, avec ou sans options de formatage avancé, mais si vous souhaitez simplement convertir un nombre réel en chaîne de caractères, ceci suffira :

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

Si ce code doit être exécuté sur l'AOS (par exemple, dans un traitement par lots), n'oubliez pas d'obtenir au préalable l'autorisation d'accès au code nécessaire. Dans ce cas, vous aurez besoin d'une autorisation d'interopérabilité de type ClrInterop pour appeler du code .NET. L'exemple de code complet ressemblerait donc à ceci :

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

Sachez que cette simple fonction System::Convert utilise les paramètres régionaux actuels du système pour le séparateur décimal. Cela ne vous posera peut-être pas de problème, mais pour moi qui vis dans une région où la virgule est utilisée comme séparateur décimal, un traitement supplémentaire pourrait s'avérer nécessaire si la chaîne de caractères doit être utilisée dans un fichier lisible par d'autres systèmes.

Lectures complémentaires

Si vous avez apprécié cet article, vous aimerez peut-être aussi ces suggestions :


Partager sur BlueskyPartager sur FacebookPartager sur LinkedInPartager sur TumblrPartager sur XPartager sur LinkedInÉpingler sur Pinterest

Mikkel Christensen

A propos de l'auteur

Mikkel Christensen
Mikkel est le créateur et le propriétaire de miklix.com. Il a plus de 20 ans d'expérience en tant que programmeur informatique professionnel/développeur de logiciels et travaille actuellement à plein temps pour une grande entreprise européenne de TI. Lorsqu'il ne blogue pas, il consacre son temps libre à un large éventail d'intérêts, de passe-temps et d'activités, ce qui peut se refléter dans une certaine mesure dans la variété des sujets abordés sur ce site web.