Teisendage reaal kõigi kümnendkohtadega stringiks rakenduses Dynamics AX 2012

Avaldatud: 16. veebruar 2025, kell 10:40:30 UTC
Viimati uuendatud: 12. jaanuar 2026, kell 08:50:47 UTC

Selles artiklis selgitan, kuidas Dynamics AX 2012-s ujukomaarvu stringiks teisendada, säilitades samal ajal kõik kümnendmurrud, sh X++ koodi näide.


See lehekülg on inglise keelest masintõlgitud, et muuta see võimalikult paljudele inimestele kättesaadavaks. Kahjuks ei ole masintõlge veel täiuslik tehnoloogia, mistõttu võivad esineda vead. Kui soovite, võite vaadata ingliskeelset originaalversiooni siin:

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

Selle postituse teave põhineb Dynamics AX 2012 R3-l. See ei pruugi kehtida teiste versioonide puhul.

Aeg-ajalt pean ma reaalarvu stringiks teisendama. Tavaliselt piisab selle lihtsalt strFmt() funktsioonile edastamisest, aga see funktsioon ümardab alati kahe kümnendkohani, mis pole alati see, mida ma tahan.

Siis on veel funktsioon num2str(), mis töötab küll hästi, aga nõuab, et teaksite eelnevalt, mitu kümnendkohta ja tähemärki soovite.

Mis siis, kui soovite lihtsalt numbri teisendada stringiks, mis sisaldab kõiki numbreid ja kümnendmurde? Mingil põhjusel on see midagi, mis paneb mind alati Google'ist otsima, sest see on üllatavalt raskesti teostatav ja ma teen seda nii harva, et ma tavaliselt ei mäletagi täpselt, kuidas – enamikus programmeerimiskeeltes eeldaksin, et saate lihtsalt reaalarvu tühja stringiga liita, aga X++ seda ei toeta.

Igatahes, minu leitud lihtsaim viis selleks on .NET-kõne kasutamine. Ka siin on mitu võimalust, nii täiustatud vormindamise valikutega kui ka ilma, aga kui soovite lihtsalt reaalarvu stringiks teisendada, piisab sellest:

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

Kui seda koodi kavatsetakse AOS-is käivitada (näiteks pakktöötluses), pidage meeles, et kõigepealt tuleb kinnitada vajalik koodile juurdepääsu õigus. Sellisel juhul vajate .NET-koodi kutsumiseks ClrInterop tüüpi InteropPermission'i, seega näeks täielik koodinäide välja umbes selline:

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

Pea meeles, et see lihtne System::Convert funktsioon kasutab süsteemi praegust lokaati kümnendkoha suhtes. See ei pruugi sulle probleemiks olla, aga minu jaoks, kes elan piirkonnas, kus kümnendkoha eraldajana kasutatakse punkti asemel koma, võib see vajada täiendavat töötlemist, kui stringi on vaja kasutada näiteks failis, mida peavad teised süsteemid loetavaks pidama.

Lisalugemist

Kui see postitus teile meeldis, võivad teile meeldida ka need soovitused:


Jagage Bluesky'sJaga FacebookisJagage LinkedInisJaga TumblrisJaga X-isKinnitage PinterestisJaga Redditis

Mikkel Christensen

Autorist

Mikkel Christensen
Mikkel on miklix.com looja ja omanik. Tal on üle 20 aasta kogemust professionaalse programmeerija/tarkvaraarendajana ning praegu töötab ta täiskohaga suures Euroopa IT-ettevõttes. Kui ta ei kirjuta blogi, veedab ta oma vaba aega mitmesuguste huvide, hobide ja tegevustega, mis võib mingil määral kajastuda sellel veebisaidil käsitletavate teemade mitmekesisuses.