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
Poslední aktualizace: 12. ledna 2026 v 8:50:44 UTC
V tomto článku vysvětluji, jak v aplikaci Dynamics AX 2012 převést číslo s plovoucí desetinnou čárkou na řetězec se zachováním všech desetinných míst, a to 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 aplikaci Dynamics AX 2012 R3. Pro jiné verze mohou, ale nemusí být platné.
Občas potřebuji převést reálné číslo na řetězec. Obvykle stačí jeho předání funkci strFmt(), ale tato funkce vždy zaokrouhlí na dvě desetinná místa, což není vždycky 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 jen 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í googlit, protože je překvapivě nejasné to udělat 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 byste mohli jednoduše zřetězit reálné číslo s prázdným řetězcem, ale X++ to nepodporuje.
Každopádně, zdaleka nejjednodušší způsob, jaký jsem našel, je použití volání .NET. I zde existuje několik možností, s možnostmi pokročilého formátování i bez nich, ale pokud chcete jen opravdu jednoduchý převod reálného čísla na řetězec, postačí toto:
Pokud má být tento kód spuštěn na AOS (například v dávkové úloze), nezapomeňte nejprve potvrdit potřebná oprávnění k přístupu ke kódu. V tomto případě budete potřebovat InteropPermission typu ClrInterop pro volání kódu .NET, takže celý příklad kódu by vypadal nějak takto:
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();
Upozorňujeme, že tato jednoduchá funkce System::Convert používá aktuální národní prostředí systému s ohledem na znak desetinné čárky. Pro vás to nemusí být problém, ale pro mě, který žiji v oblasti, kde se jako oddělovač desetinných míst používá čárka místo tečky, může vyžadovat další zpracování, pokud je například třeba řetězec použít v souboru, který musí být čitelný i jinými systémy.
Další čtení
Pokud se vám tento příspěvek líbil, mohly by se vám líbit i tyto návrhy:
- Chyba „Pro objekt smlouvy dat není definována žádná třída metadat“ v Dynamics AX 2012
- Formátování řetězce pomocí maker a strFmt v Dynamics AX 2012
- Rozdíl mezi data() a buf2Buf() v Dynamics AX 2012
