Miklix

Konverter en ekte til streng med alle desimaler i Dynamics AX 2012

Publisert: 16. februar 2025 kl. 10:40:44 UTC

I denne artikkelen forklarer jeg hvordan du konverterer et flyttall til en streng mens du beholder alle desimaler i Dynamics AX 2012, inkludert et X++ kodeeksempel.


Denne siden er maskinoversatt fra engelsk for å gjøre den tilgjengelig for så mange som mulig. Dessverre er maskinoversettelse ennå ikke en fullkommen teknologi, så det kan forekomme feil. Hvis du foretrekker det, kan du se den engelske originalversjonen her:

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

Informasjonen i dette innlegget er basert på Dynamics AX 2012 R3. Det kan være eller ikke være gyldig for andre versjoner.

En gang i blant må jeg konvertere et reelt tall til en streng. Vanligvis er det nok å bare sende den til strFmt(), men den funksjonen rundes alltid av til to desimaler, noe som ikke alltid er det jeg ønsker.

Så er det num2str()-funksjonen, som fungerer bra, men krever at du vet på forhånd hvor mange desimaler og tegn du vil ha.

Hva om du bare vil ha tallet konvertert til en streng, med alle sifre og desimaler? Av en eller annen grunn er dette noe som alltid får meg til å google fordi det er overraskende uklart å gjøre, og jeg gjør det så sjeldent at jeg vanligvis ikke husker nøyaktig hvordan - i de fleste programmeringsspråk ville jeg forvente at du bare kunne sette den virkelige sammen til en tom streng, men X++ støtter ikke det.

Uansett, den desidert enkleste måten jeg har funnet å gjøre dette på er ved å bruke et .NET-kall. Det er flere alternativer her også, med og uten alternativer for avansert formatering, men hvis du bare vil ha den virkelig enkle konverteringen av en ekte til en streng, vil dette være tilstrekkelig:

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

Hvis denne koden skal kjøres på AOS (for eksempel i en batch-jobb), husk å hevde nødvendig kodetilgangstillatelse først. I dette tilfellet trenger du en InteropPermission av typen ClrInterop for å kalle .NET-kode, så det fullstendige kodeeksemplet vil se omtrent slik ut:

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

Vær oppmerksom på at denne enkle System::Convert-funksjonen bruker systemets gjeldende lokalitet med hensyn til desimaltegn. Dette er kanskje ikke et problem for deg, men for meg som bor i et område hvor komma er brukt fremfor punktum som desimalskilletegn, kan det kreve ytterligere behandling dersom strengen for eksempel må brukes i en fil som må kunne leses av andre systemer.

Del på BlueskyDel på FacebookDel på LinkedInDel på TumblrDel på XDel på LinkedInFest på Pinterest

Mikkel Bang Christensen

Om forfatteren

Mikkel Bang Christensen
Mikkel er skaperen og eieren av miklix.com. Han har over 20 års erfaring som profesjonell dataprogrammerer/programvareutvikler og er for tiden ansatt på fulltid i et stort europeisk IT-selskap. Når han ikke blogger, bruker han fritiden sin på en lang rekke interesser, hobbyer og aktiviteter, noe som til en viss grad kan gjenspeiles i de mange ulike temaene som dekkes på dette nettstedet.