Miklix

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

Udgivet: 16. februar 2025 kl. 10.40.26 UTC

I denne artikel forklarer jeg, hvordan man konverterer et flydende decimaltal til en streng, mens 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. Det er muligvis ikke gyldigt for andre versioner.

En gang imellem skal jeg konvertere et reelt tal til en streng. Normalt er det nok bare at overføre 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 ønsker.

Hvad hvis du bare vil have tallet konverteret til en streng med alle cifre og decimaler? Af en eller anden grund er dette noget, der altid får mig til at google, fordi det er overraskende dunkelt 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 du bare kunne sammenkæde det rigtige til en tom streng, men det understøtter X++ ikke.

Anyway, den langt nemmeste måde, jeg har fundet at gøre dette på, er ved at bruge et .NET-kald. Der er også flere muligheder her, med og uden muligheder for avanceret formatering, men hvis du bare vil have den virkelig simple konvertering af en ægte 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 angive 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 ville 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 der bruges komma frem for punktum som decimalseparator, kan det kræve yderligere bearbejdning, hvis strengen for eksempel skal bruges i en fil, der skal kunne læses af andre systemer.

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

Mikkel Bang Christensen

Om forfatteren

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