Miklix

Skakel 'n reële na string met alle desimale in Dynamics AX 2012

Gepubliseer: 16 Februarie 2025 om 10:46:15 UTC
Laas opgedateer: 12 Januarie 2026 om 08:52:41 UTC

In hierdie artikel verduidelik ek hoe om 'n drywende kommagetal na 'n string om te skakel terwyl alle desimale in Dynamics AX 2012 behoue bly, insluitend 'n X++-kodevoorbeeld.


Hierdie bladsy is masjienvertaal uit Engels om dit vir soveel mense moontlik toeganklik te maak. Ongelukkig is masjienvertaling nog nie 'n volmaakte tegnologie nie, dus kan foute voorkom. As jy verkies, kan jy die oorspronklike Engelse weergawe hier sien:

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

Die inligting in hierdie plasing is gebaseer op Dynamics AX 2012 R3. Dit mag dalk geldig wees vir ander weergawes, maar ook nie.

Elke nou en dan moet ek 'n reële getal na 'n string omskakel. Gewoonlik is dit genoeg om dit net na strFmt() deur te gee, maar daardie funksie rond altyd af na twee desimale, wat nie altyd is wat ek wil hê nie.

Dan is daar die num2str() funksie, wat wel goed werk, maar vereis dat jy vooraf weet hoeveel desimale en karakters jy wil hê.

Wat as jy net die getal na 'n string wil omskakel, met alle syfers en desimale? Om die een of ander rede is dit iets wat my altyd laat Google, want dit is verbasend obskuur om te doen en ek doen dit so selde dat ek gewoonlik nie presies kan onthou hoe nie - in die meeste programmeertale sou ek verwag dat jy net die reële getal na 'n leë string kan koppel, maar X++ ondersteun dit nie.

Hoe dit ook al sy, die verreweg maklikste manier wat ek gevind het om dit te doen, is deur 'n .NET-oproep te gebruik. Daar is ook verskeie opsies hier, met en sonder opsies vir gevorderde formatering, maar as jy net die baie eenvoudige omskakeling van 'n reële na 'n string wil hê, sal dit voldoende wees:

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

As hierdie kode op die AOS uitgevoer moet word (byvoorbeeld in 'n bondeltaak), onthou om eers die nodige kodetoegangstoestemming te eis. In hierdie geval benodig jy 'n InteropPermission van die tipe ClrInterop om .NET-kode aan te roep, so die volledige kodevoorbeeld sal so iets lyk:

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

Wees bewus daarvan dat hierdie eenvoudige System::Convert-funksie die stelsel se huidige lokaal gebruik met betrekking tot die desimale puntkarakter. Dit is dalk nie 'n probleem vir jou nie, maar vir my wat in 'n gebied woon waar komma eerder as punt as desimale skeier gebruik word, mag dit verdere verwerking vereis as die string byvoorbeeld in 'n lêer gebruik moet word wat deur ander stelsels leesbaar moet wees.

Verdere Leeswerk

As jy hierdie plasing geniet het, sal jy dalk ook van hierdie voorstelle hou:


Deel op BlueskyDeel op FacebookDeel op LinkedInDeel op TumblrDeel op XDeel op LinkedInSpeld op Pinterest

Mikkel Christensen

Oor die skrywer

Mikkel Christensen
Mikkel is die skepper en eienaar van miklix.com. Hy het meer as 20 jaar ondervinding as 'n professionele rekenaarprogrammeerder/sagteware-ontwikkelaar en is tans voltyds in diens van 'n groot Europese IT-korporasie. Wanneer hy nie blog nie, spandeer hy sy vrye tyd aan 'n groot verskeidenheid belangstellings, stokperdjies en aktiwiteite, wat tot 'n mate weerspieël kan word in die verskeidenheid onderwerpe wat op hierdie webwerf gedek word.