Miklix

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

Publicerad: 16 februari 2025 kl. 10:41:00 UTC
Senast uppdaterad: 12 januari 2026 kl. 08:52:24 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. Den kan vara giltig för andra versioner, men inte nödvändigtvis.

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

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

Tänk om man bara vill att talet ska konverteras till en sträng, med alla siffror och decimaler? Av någon anledning är det här något som alltid får mig att googla eftersom det är förvånansvärt obskyrt att göra och jag gör det så sällan att jag vanligtvis inte kan komma ihåg exakt hur – i de flesta programmeringsspråk skulle jag förvänta mig att man bara skulle kunna sammanfoga det reella talet till en tom sträng, men X++ stöder inte det.

Hur som helst, det absolut enklaste sättet jag har hittat att göra detta är att använda ett .NET-anrop. 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 reell till en sträng, 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 ange nödvändig kodåtkomstbehörighet. 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 den här enkla System::Convert-funktionen använder systemets aktuella språkinställning 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 komma 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 kunna läsas av andra system.

Vidare läsning

Om du gillade det här inlägget kanske du också gillar dessa förslag:


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

Mikkel Christensen

Om författaren

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