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
Laatst bijgewerkt: 12 januari 2026 om 08:50:53 UTC

In dit artikel leg ik uit hoe je een drijvende-komma getal naar een tekenreeks converteert met behoud van alle decimalen in Dynamics AX 2012, inclusief een X++-codevoorbeeld.


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. Deze informatie is mogelijk niet geldig voor andere versies.

Af en toe moet ik een reëel getal omzetten naar een tekenreeks. Meestal is het voldoende om het aan strFmt() door te geven, 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 je van tevoren moet weten hoeveel decimalen en tekens je wilt.

Wat als je het getal gewoon wilt omzetten naar een tekenreeks, inclusief alle cijfers en decimalen? Om de een of andere reden moet ik dit altijd opzoeken op Google, omdat het verrassend lastig is om te doen en ik het zo zelden doe dat ik meestal niet meer precies weet hoe het moet. In de meeste programmeertalen zou je verwachten dat je het werkelijke getal gewoon aan een lege tekenreeks kunt toevoegen, maar X++ ondersteunt dat niet.

De verreweg eenvoudigste manier die ik heb gevonden om dit te doen, is door een .NET-aanroep te gebruiken. Ook hier zijn meerdere opties beschikbaar, met en zonder opties voor geavanceerde opmaak, maar als je alleen een heel eenvoudige conversie van een reëel getal naar een tekenreeks wilt, is dit voldoende:

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

Als deze code op de AOS moet worden uitgevoerd (bijvoorbeeld in een batchtaak), vergeet dan niet eerst de benodigde toegangsmachtiging voor de code te verkrijgen. 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 scheidingsteken. Dit is voor u wellicht geen probleem, maar voor mij, die in een regio woont waar de komma in plaats van de punt als decimaal scheidingsteken wordt gebruikt, kan dit extra verwerking vereisen als de tekenreeks bijvoorbeeld in een bestand moet worden gebruikt dat door andere systemen moet kunnen worden gelezen.

Verder lezen

Als je dit bericht leuk vond, vind je deze suggesties misschien ook interessant:


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

Mikkel Christensen

Over de auteur

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