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

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


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 ou non être valables pour d'autres versions.

De temps en temps, j'ai besoin de convertir un nombre réel en chaîne. En général, il suffit de le transmettre à strFmt(), mais cette fonction arrondit toujours à deux décimales, ce qui n'est pas toujours ce que je souhaite.

Ensuite, il y a la fonction num2str(), qui fonctionne bien, mais nécessite que vous sachiez à l'avance combien de décimales et de caractères vous voulez.

Et si vous voulez simplement convertir le nombre en chaîne, avec tous les chiffres et décimales ? Pour une raison quelconque, c'est quelque chose qui me fait toujours chercher sur Google, car 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 en une chaîne vide, mais X++ ne prend pas cela en charge.

Quoi qu'il en soit, le moyen 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 simplement la conversion très simple d'un réel en chaîne, cela suffira :

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

Si ce code doit être exécuté sur l'AOS (par exemple dans un travail par lots), n'oubliez pas d'activer 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, donc l'exemple de code complet ressemblerait à ceci :

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

Sachez que cette fonction simple System::Convert utilise les paramètres régionaux actuels du système par rapport au caractère décimal. Cela ne pose peut-être pas de problème pour vous, mais pour moi qui vis dans une région 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.

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

Mikkel Bang Christensen

A propos de l'auteur

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