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++.
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:
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:
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.