Преобразуване на реален в низ с всички десетични знаци в Dynamics AX 2012

Публикувано: 16 февруари 2025 г. в 10:40:24 ч. UTC
Последна актуализация: 12 януари 2026 г. в 8:50:43 ч. UTC

В тази статия обяснявам как да конвертирам число с плаваща запетая в низ, като същевременно запазя всички десетични знаци в Dynamics AX 2012, включително примерен код за X++.


Тази страница е машинно преведена от английски език, за да бъде достъпна за възможно най-много хора. За съжаление машинният превод все още не е съвършена технология, така че могат да възникнат грешки. Ако предпочитате, можете да видите оригиналната версия на английски език тук:

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

Информацията в тази публикация е базирана на Dynamics AX 2012 R3. Тя може да е валидна или да не е валидна за други версии.

От време на време ми се налага да преобразувам реално число в низ. Обикновено е достатъчно само да го предам на strFmt(), но тази функция винаги закръглява до две десетични числа, което не винаги е това, което искам.

След това е функцията num2str(), която работи добре, но изисква да знаете предварително колко десетични знаци и символи искате.

Ами ако просто искате числото да се преобразува в низ, с всички цифри и десетични знаци? По някаква причина това е нещо, което винаги ме кара да търся в Google, защото е изненадващо неясно за изпълнение и го правя толкова рядко, че обикновено не мога да си спомня точно как - в повечето езици за програмиране бих очаквал, че можете просто да свържете реалното число с празен низ, но X++ не поддържа това.

Както и да е, най-лесният начин, който открих, е чрез използване на .NET извикване. Тук също има множество опции, със и без опции за разширено форматиране, но ако просто искате наистина простото преобразуване на реално число в низ, това ще е достатъчно:

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

Ако този код ще се изпълнява на AOS (например в пакетна задача), не забравяйте първо да заявите необходимото разрешение за достъп до кода. В този случай ще ви е необходимо InteropPermission от тип ClrInterop, за да извикате .NET код, така че пълният примерен код би изглеждал по следния начин:

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

Имайте предвид, че тази проста функция System::Convert използва текущата локализация на системата по отношение на десетичната запетая. Това може да не е проблем за вас, но за мен, който живея в район, където се използва запетая, а не точка като десетичен разделител, може да се изисква допълнителна обработка, ако например низът трябва да се използва във файл, който трябва да може да се чете от други системи.

Допълнително четене

Ако ви е харесала тази публикация, може да ви харесат и тези предложения:


Споделете в BlueskyСподелете във FacebookСподелете в LinkedInСподелете в TumblrСподелете в XЗакачи в ПинтерестСподелете в Reddit

Микел Кристенсен

За автора

Микел Кристенсен
Микел е създател и собственик на сайта miklix.com. Той има над 20 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.