Miklix

Converteer een reëel getal naar een tekenreeks met alleen decimalen in Dynamics AX 2012

Gepubliceerd: 16 februari 2025 om 10:40:45 UTC

In dit artikel leg ik uit hoe u een drijvendekommagetal in Dynamics AX 2012 naar een tekenreeks kunt converteren, waarbij alle decimalen behouden blijven. Ik geef ook een voorbeeld van X++-code.


Deze pagina is machinaal uit het Engels vertaald om hem voor zoveel mogelijk mensen toegankelijk te maken. Helaas is machinevertaling nog geen geperfectioneerde technologie, dus er kunnen fouten optreden. Als je dat liever hebt, kun je hier de originele Engelse versie bekijken:

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

De informatie in dit bericht is gebaseerd op Dynamics AX 2012 R3. Het kan wel of niet geldig zijn voor andere versies.

Af en toe moet ik een reëel getal omzetten naar een string. Meestal is het voldoende om het gewoon door te geven aan strFmt(), maar die functie rondt altijd af op twee decimalen, wat niet altijd is wat ik wil.

Dan is er nog de functie num2str() die goed werkt, maar waarvoor u vooraf moet weten hoeveel decimalen en tekens u wilt.

Wat als je het getal gewoon wilt omzetten naar een string, met alle cijfers en decimalen? Om een of andere reden is dit iets waar ik altijd naar Google zoek, omdat het verrassend obscuur is om te doen en ik het zo zelden doe dat ik me meestal niet meer precies kan herinneren hoe - in de meeste programmeertalen zou ik verwachten dat je de real gewoon aan een lege string kunt koppelen, maar X++ ondersteunt dat niet.

Hoe dan ook, de makkelijkste manier die ik heb gevonden om dit te doen is door een .NET call te gebruiken. Er zijn hier ook meerdere opties, met en zonder opties voor geavanceerde opmaak, maar als je gewoon de heel simpele conversie van een real naar een string wilt, is dit voldoende:

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

Als deze code op de AOS moet worden uitgevoerd (bijvoorbeeld in een batchjob), vergeet dan niet om eerst de benodigde codetoegangsmachtiging te claimen. In dit geval hebt u een InteropPermission van het type ClrInterop nodig om .NET-code aan te roepen, dus het volledige codevoorbeeld zou er ongeveer zo uitzien:

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

Houd er rekening mee dat deze eenvoudige System::Convert-functie de huidige landinstellingen van het systeem gebruikt met betrekking tot het decimale puntteken. Dit is voor u misschien geen probleem, maar voor mij, die in een gebied woont waar komma's in plaats van punten als decimaal scheidingsteken worden gebruikt, kan het verdere verwerking vereisen als de string bijvoorbeeld moet worden gebruikt in een bestand dat door andere systemen moet kunnen worden gelezen.

Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Bang Christensen

Over de auteur

Mikkel Bang Christensen
Mikkel is de bedenker en eigenaar van miklix.com. Hij heeft meer dan 20 jaar ervaring als professioneel computerprogrammeur/softwareontwikkelaar en werkt momenteel fulltime voor een groot Europees IT-bedrijf. Als hij niet blogt, besteedt hij zijn vrije tijd aan een breed scala aan interesses, hobby's en activiteiten, die tot op zekere hoogte weerspiegeld kunnen worden in de verscheidenheid aan onderwerpen op deze website.