Miklix

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

Публикувано: 16 февруари 2025 г. в 10:40:24 ч. 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Споделете в LinkedInЗакачи в Пинтерест

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

За автора

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