Miklix

Konvertera en reell till sträng med alla decimaler i Dynamics AX 2012

Publicerad: 16 februari 2025 kl. 10:41:00 UTC

I den här artikeln förklarar jag hur man konverterar ett flyttal till en sträng samtidigt som alla decimaler bevaras i Dynamics AX 2012, inklusive ett X++-kodexempel.


Denna sida har maskinöversatts från engelska för att göra den tillgänglig för så många som möjligt. Tyvärr är maskinöversättning ännu inte en fulländad teknik, så fel kan uppstå. Om du föredrar det kan du se den engelska originalversionen här:

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

Informationen i det här inlägget är baserad på Dynamics AX 2012 R3. Det kan eller kanske inte är giltigt för andra versioner.

Då och då behöver jag konvertera ett reellt tal till en sträng. Vanligtvis räcker det med att bara skicka den till strFmt(), men den funktionen avrundas alltid till två decimaler, vilket inte alltid är vad jag vill ha.

Sedan finns det num2str()-funktionen, som visserligen fungerar bra, men kräver att du i förväg vet hur många decimaler och tecken du vill ha.

Vad händer om du bara vill konvertera talet till en sträng, med alla siffror och decimaler? Av någon anledning är detta något som alltid får mig att googla eftersom det är förvånansvärt dunkelt att göra och jag gör det så sällan att jag vanligtvis inte kommer ihåg exakt hur - i de flesta programmeringsspråk skulle jag förvänta mig att du bara kunde sammanfoga det verkliga till en tom sträng, men X++ stöder inte det.

Hur som helst, det överlägset enklaste sättet jag har hittat att göra detta på är att använda ett .NET-samtal. Det finns flera alternativ här också, med och utan alternativ för avancerad formatering, men om du bara vill ha den riktigt enkla konverteringen av en real till en sträng så räcker det här:

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

Om den här koden ska köras på AOS (till exempel i ett batchjobb), kom ihåg att först ansöka om den nödvändiga åtkomstbehörigheten för koden. I det här fallet behöver du en InteropPermission av typen ClrInterop för att anropa .NET-kod, så det fullständiga kodexemplet skulle se ut ungefär så här:

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

Var medveten om att denna enkla System::Convert-funktion använder systemets aktuella lokalitet med avseende på decimaltecken. Detta kanske inte är ett problem för dig, men för mig som bor i ett område där kommatecken används snarare än punkt som decimalavgränsare kan det kräva ytterligare bearbetning om strängen till exempel behöver användas i en fil som måste vara läsbar av andra system.

Dela på BlueskyDela på FacebookDela på LinkedInDela på TumblrDela på XDela på LinkedInFäst på Pinterest

Mikkel Bang Christensen

Om författaren

Mikkel Bang Christensen
Mikkel är skaparen och ägaren av miklix.com. Han har över 20 års erfarenhet som professionell datorprogrammerare/mjukvaruutvecklare och är för närvarande heltidsanställd på ett stort europeiskt IT-bolag. När han inte bloggar ägnar han sin fritid åt en mängd olika intressen, hobbies och aktiviteter, vilket i viss mån kan återspeglas i de olika ämnen som behandlas på den här webbplatsen.