Miklix

Pretvorite realno v niz z vsemi decimalkami v Dynamics AX 2012

Objavljeno: 16. februar 2025 ob 10:40:58 dop. UTC

V tem članku razlagam, kako pretvoriti število s plavajočo vejico v niz, pri tem pa ohraniti vse decimalke v Dynamics AX 2012, vključno s primerom kode X++.


Ta stran je bila strojno prevedena iz angleščine, da bi bila dostopna čim večjemu številu ljudi. Žal strojno prevajanje še ni popolna tehnologija, zato lahko pride do napak. Če želite, si lahko izvirno angleško različico ogledate tukaj:

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

Informacije v tej objavi temeljijo na Dynamics AX 2012 R3. Lahko velja ali ne velja za druge različice.

Vsake toliko časa moram realno število pretvoriti v niz. Običajno zadostuje samo posredovanje v strFmt(), vendar ta funkcija vedno zaokroži na dve decimalki, kar ni vedno tisto, kar želim.

Potem je tu še funkcija num2str(), ki deluje dobro, vendar zahteva, da vnaprej veste, koliko decimalk in znakov želite.

Kaj pa, če želite samo številko pretvoriti v niz z vsemi števkami in decimalkami? Iz neznanega razloga je to nekaj, zaradi česar vedno iščem v Googlu, ker je to presenetljivo nejasno in to počnem tako redko, da se običajno ne morem spomniti natančno, kako - v večini programskih jezikov bi pričakoval, da bi lahko preprosto združili real v prazen niz, vendar X++ tega ne podpira.

Kakorkoli že, daleč najlažji način, ki sem ga našel, je uporaba klica .NET. Tudi tukaj je na voljo več možnosti, z možnostmi naprednega oblikovanja in brez njih, a če želite le res preprosto pretvorbo realnega v niz, bo to zadostovalo:

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

Če se bo ta koda izvajala na AOS (na primer v paketnem opravilu), ne pozabite najprej uveljaviti potrebnega dovoljenja za dostop kode. V tem primeru boste za klic kode .NET potrebovali dovoljenje InteropPermission tipa ClrInterop, zato bi bil primer celotne kode videti nekako takole:

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

Zavedajte se, da ta preprosta funkcija System::Convert uporablja trenutno področno nastavitev sistema glede na decimalno vejico. To morda ni težava za vas, toda zame, ki živim na območju, kjer se kot decimalno ločilo uporablja vejica in ne pika, bo morda potrebna nadaljnja obdelava, če je treba na primer niz uporabiti v datoteki, ki mora biti berljiva z drugimi sistemi.

Delite na BlueskyDelite na FacebookuDelite na LinkedInuDelite na TumblrDelite na XDelite na LinkedInuPripni na Pinterest

Mikkel Bang Christensen

O avtorju

Mikkel Bang Christensen
Mikkel je avtor in lastnik spletne strani miklix.com. Ima več kot 20 let izkušenj kot profesionalni računalniški programer/razvijalec programske opreme in je trenutno za polni delovni čas zaposlen v veliki evropski IT korporaciji. Kadar ne piše bloga, svoj prosti čas posveča številnim interesom, hobijem in dejavnostim, kar se do neke mere odraža v raznolikosti tem na tem spletnem mestu.