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 години опит като професионален компютърен програмист/разработчик на софтуер и в момента работи на пълен работен ден в голяма европейска ИТ корпорация. Когато не пише в блога, той прекарва свободното си време в широк спектър от интереси, хобита и дейности, които до известна степен могат да бъдат отразени в разнообразието от теми, обхванати в този уебсайт.