Miklix

Převeďte real na řetězec se všemi desetinnými místy v Dynamics AX 2012

Vydáno: 16. února 2025 v 10:40:25 UTC

V tomto článku vysvětluji, jak převést číslo s plovoucí desetinnou čárkou na řetězec při zachování všech desetinných míst v Dynamics AX 2012, včetně příkladu kódu X++.


Tato stránka byla strojově přeložena z angličtiny, aby byla přístupná co největšímu počtu lidí. Strojový překlad bohužel ještě není dokonalá technologie, takže může dojít k chybám. Pokud si přejete, můžete si prohlédnout původní anglickou verzi zde:

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

Informace v tomto příspěvku jsou založeny na Dynamics AX 2012 R3. Může a nemusí platit pro jiné verze.

Jednou za čas potřebuji převést reálné číslo na řetězec. Obvykle stačí předat strFmt(), ale tato funkce vždy zaokrouhlí na dvě desetinná místa, což není vždy to, co chci.

Pak je tu funkce num2str(), která funguje dobře, ale vyžaduje, abyste předem věděli, kolik desetinných míst a znaků chcete.

Co když chcete číslo pouze převést na řetězec se všemi číslicemi a desetinnými místy? Z nějakého důvodu je to něco, co mě neustále nutí googlovat, protože je to překvapivě nejasné a dělám to tak zřídka, že si obvykle nepamatuji přesně jak – ve většině programovacích jazyků bych očekával, že stačí zřetězit real do prázdného řetězce, ale X++ to nepodporuje.

Zdaleka nejjednodušší způsob, jak to udělat, je použití .NET volání. I zde je několik možností, s možnostmi pokročilého formátování i bez nich, ale pokud chcete opravdu jednoduchý převod reálného na řetězec, bude stačit:

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

Pokud má být tento kód spuštěn na AOS (například v dávkové úloze), nezapomeňte nejprve zajistit potřebná oprávnění pro přístup ke kódu. V tomto případě budete potřebovat InteropPermission typu ClrInterop pro volání kódu .NET, takže úplný příklad kódu bude vypadat nějak takto:

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

Uvědomte si, že tato jednoduchá funkce System::Convert používá aktuální národní prostředí systému s ohledem na znak desetinné čárky. To pro vás nemusí být problém, ale pro mě, který žije v oblasti, kde se jako oddělovač desetinných míst používá spíše čárka než tečka, to může vyžadovat další zpracování, pokud je například třeba řetězec použít v souboru, který musí být čitelný pro jiné systémy.

Sdílet na BlueskySdílejte na FacebookuSdílet na LinkedInSdílet na TumblrSdílet na XSdílet na LinkedInPřipnout na Pinterest

Mikkel Bang Christensen

O autorovi

Mikkel Bang Christensen
Mikkel je tvůrcem a majitelem webu miklix.com. Má více než 20 let zkušeností jako profesionální programátor/vývojář softwaru a v současné době pracuje na plný úvazek pro velkou evropskou IT společnost. Pokud zrovna nepíše blog, věnuje svůj volný čas široké škále zájmů, koníčků a aktivit, což se může do jisté míry odrážet v rozmanitosti témat na tomto webu.