Miklix

Konverter en ægte til streng med alle decimaler i Dynamics AX 2012

Udgivet: 16. februar 2025 kl. 10.40.26 UTC
Sidst opdateret: 12. januar 2026 kl. 08.50.44 UTC

I denne artikel forklarer jeg, hvordan man konverterer et flydende tal til en streng, samtidig med at alle decimaler bevares i Dynamics AX 2012, inklusive et X++ kodeeksempel.


Denne side er blevet maskinoversat fra engelsk for at gøre den tilgængelig for så mange mennesker som muligt. Desværre er maskinoversættelse endnu ikke en perfekt teknologi, så der kan forekomme fejl. Hvis du foretrækker det, kan du se den originale engelske version her:

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

Oplysningerne i dette indlæg er baseret på Dynamics AX 2012 R3. De er muligvis ikke gyldige for andre versioner.

En gang imellem har jeg brug for at konvertere et reelt tal til en streng. Normalt er det nok bare at sende det til strFmt(), men den funktion runder altid af til to decimaler, hvilket ikke altid er det, jeg ønsker.

Så er der num2str()-funktionen, som fungerer godt, men kræver, at du på forhånd ved, hvor mange decimaler og tegn du vil have.

Hvad hvis du bare vil have tallet konverteret til en streng, med alle cifre og decimaler? Af en eller anden grund er det noget, der altid får mig til at google, fordi det er overraskende uklart at gøre, og jeg gør det så sjældent, at jeg normalt ikke kan huske præcis hvordan - i de fleste programmeringssprog ville jeg forvente, at man bare kunne sammenkæde det reelle tal med en tom streng, men X++ understøtter ikke det.

Uanset hvad, er den langt nemmeste måde jeg har fundet at gøre dette på ved at bruge et .NET-kald. Der er også flere muligheder her, med og uden muligheder for avanceret formatering, men hvis du bare ønsker den helt simple konvertering af en reel værdi til en streng, er dette tilstrækkeligt:

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

Hvis denne kode skal køres på AOS'en (f.eks. i et batchjob), skal du huske at anmode om den nødvendige kodeadgangstilladelse først. I dette tilfælde skal du bruge en InteropPermission af typen ClrInterop for at kalde .NET-kode, så det fulde kodeeksempel vil se nogenlunde sådan ud:

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

Vær opmærksom på, at denne simple System::Convert-funktion bruger systemets aktuelle lokalitet med hensyn til decimaltegn. Dette er måske ikke et problem for dig, men for mig, der bor i et område, hvor komma bruges i stedet for punktum som decimalseparator, kan det kræve yderligere behandling, hvis strengen for eksempel skal bruges i en fil, der skal kunne læses af andre systemer.

Yderligere læsning

Hvis du kunne lide dette indlæg, kan du måske også lide disse forslag:


Del på BlueskyDel på FacebookDel på LinkedInDel på TumblrDel på XDel på LinkedInFastgør på Pinterest

Mikkel Christensen

Om forfatteren

Mikkel Christensen
Mikkel er skaberen og ejeren af miklix.com. Han har over 20 års erfaring som professionel computerprogrammør/softwareudvikler og er i øjeblikket fuldtidsansat i en stor europæisk IT-virksomhed. Når han ikke blogger, bruger han sin fritid på en lang række interesser, hobbyer og aktiviteter, som i et vist omfang afspejles i de mange forskellige emner, der dækkes på dette websted.