Miklix

Preveďte real na reťazec so všetkými desatinnými miestami v Dynamics AX 2012

Publikované: 16. februára 2025 o 10:40:56 UTC

V tomto článku vysvetľujem, ako previesť číslo s pohyblivou rádovou čiarkou na reťazec pri zachovaní všetkých desatinných miest v Dynamics AX 2012, vrátane príkladu kódu X++.


Táto stránka bola strojovo preložená z angličtiny, aby bola prístupná čo najväčšiemu počtu ľudí. Žiaľ, strojový preklad ešte nie je dokonalá technológia, takže sa môžu vyskytnúť chyby. Ak chcete, môžete si pozrieť pôvodnú anglickú verziu tu:

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

Informácie v tomto príspevku sú založené na Dynamics AX 2012 R3. Môže a nemusí platiť pre iné verzie.

Raz za čas potrebujem previesť reálne číslo na reťazec. Zvyčajne stačí len odovzdanie strFmt(), ale táto funkcia sa vždy zaokrúhli na dve desatinné miesta, čo nie je vždy to, čo chcem.

Potom je tu funkcia num2str(), ktorá funguje dobre, ale vyžaduje, aby ste vopred vedeli, koľko desatinných miest a znakov chcete.

Čo ak chcete číslo previesť na reťazec so všetkými číslicami a desatinnými miestami? Z nejakého dôvodu je to niečo, čo ma vždy prinúti googliť, pretože je to prekvapivo nejasné a robím to tak zriedka, že si zvyčajne nepamätám presne ako - vo väčšine programovacích jazykov by som očakával, že by ste mohli len zreťaziť real do prázdneho reťazca, ale X++ to nepodporuje.

Zďaleka najjednoduchší spôsob, ako to urobiť, je použiť volanie .NET. Aj tu je viacero možností, s možnosťami pokročilého formátovania aj bez nich, ale ak chcete skutočne jednoduchý prevod reálnej hodnoty na reťazec, bude stačiť toto:

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

Ak má byť tento kód spustený na AOS (napríklad v dávkovej úlohe), nezabudnite najprv uplatniť potrebné oprávnenie na prístup ku kódu. V tomto prípade budete potrebovať InteropPermission typu ClrInterop na volanie kódu .NET, takže úplný príklad kódu by vyzeral asi takto:

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

Uvedomte si, že táto jednoduchá funkcia System::Convert používa aktuálne miestne nastavenie systému vzhľadom na znak desatinnej čiarky. Možno to nie je problém pre vás, ale pre mňa, ktorý žijem v oblasti, kde sa ako oddeľovač desatinných miest používa čiarka namiesto bodky, môže byť potrebné ďalšie spracovanie, ak je napríklad potrebné použiť reťazec v súbore, ktorý musí byť čitateľný inými systémami.

Zdieľať na BlueskyZdieľať na FacebookuZdieľať na LinkedInZdieľať na TumblrZdieľať na XZdieľať na LinkedInPripnúť na Pintereste

Mikkel Bang Christensen

O autorovi

Mikkel Bang Christensen
Mikkel je tvorcom a majiteľom miklix.com. Má viac ako 20 rokov skúseností ako profesionálny počítačový programátor/vývojár softvéru a v súčasnosti pracuje na plný úväzok pre veľkú európsku IT korporáciu. Keď práve nepíše blog, venuje svoj voľný čas širokej škále záujmov, koníčkov a aktivít, čo sa môže do istej miery odrážať v rôznorodosti tém na tejto webovej lokalite.