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.
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:
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:
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:
- Använda en fråga i en SysOperation-datakontraktsklass i Dynamics AX 2012
- Hur man itererar över elementen i en enum från X++-kod i Dynamics AX 2012
- Strängformatering med makro och strFmt i Dynamics AX 2012
