Miklix

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

Publisert: 16. februar 2025 kl. 10:40:44 UTC
Sist oppdatert: 13. september 2025 kl. 22:52:55 UTC

I denne artikkelen forklarer jeg hvordan du konverterer et flyttall til en streng samtidig som du bevarer 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 gyldig for andre versjoner.

Av og til må jeg konvertere et reelt tall til en streng. Vanligvis er det nok å bare sende den til strFmt(), men den funksjonen runder 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 obskurt å gjøre, og jeg gjør det så sjelden at jeg vanligvis ikke husker nøyaktig hvordan - i de fleste programmeringsspråk vil jeg forvente at du bare kan sette sammen det virkelige 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-anrop. 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 real 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 satsvis jobb), må du huske å hevde den nødvendige kodetilgangstillatelsen først. I dette tilfellet trenger du en InteropPermission av typen ClrInterop for å kalle .

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 der komma brukes i stedet for punktum som desimalskilletegn, kan det kreve videre behandling hvis strengen for eksempel må brukes i en fil som må kunne leses av andre systemer.

Videre lesing

Hvis du likte dette innlegget, kan du også like disse forslagene:


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

Mikkel Christensen

Om forfatteren

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