Перетворення дійсного рядка з усіма десятковими дробами в Dynamics AX 2012
Опубліковано: 16 лютого 2025 р. о 10:41:03 UTC
У цій статті я пояснюю, як перетворити число з плаваючою комою в рядок зі збереженням усіх десяткових дробів у Dynamics AX 2012, включаючи приклад коду X++.
Convert a Real to String with All Decimals in Dynamics AX 2012
Інформація в цій публікації базується на Dynamics AX 2012 R3. Він може бути дійсним, а може і не дійсним для інших версій.
Час від часу мені потрібно перетворити дійсне число в рядок. Зазвичай достатньо просто передати його в strFmt(), але ця функція завжди округляє до двох десяткових дробів, що не завжди те, що я хочу.
Крім того, є функція num2str(), яка добре працює, але вимагає від вас заздалегідь знати, скільки десяткових дробів і символів ви хочете.
Що робити, якщо ви просто хочете, щоб число перетворилося на рядок з усіма цифрами та десятковими дробами? З якоїсь причини, це те, що завжди змушує мене гуглити, тому що це напрочуд незрозуміло робити, і я роблю це так рідко, що зазвичай не можу згадати, як саме - у більшості мов програмування я б очікував, що ви можете просто об'єднати реальне в порожній рядок, але X++ цього не підтримує.
У будь-якому випадку, найпростіший спосіб, який я знайшов, це зробити це за допомогою виклику .NET. Тут також є кілька варіантів, з параметрами розширеного форматування та без них, але якщо вам просто потрібне дійсно просте перетворення дійсного рядка в рядок, цього буде достатньо:
Якщо цей код має бути запущений на AOS (наприклад, у пакетному завданні), не забудьте спочатку встановити необхідний дозвіл на доступ до коду. У цьому випадку вам знадобиться InteropPermission типу ClrInterop для виклику коду .NET, тому повний приклад коду виглядатиме приблизно так:
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();
Майте на увазі, що ця проста функція System::Convert використовує поточну локаль системи по відношенню до десяткового символу. Можливо, це не є проблемою для вас, але для мене, хто живе в області, де як десятковий роздільник використовується кома, а не крапка, це може вимагати подальшої обробки, якщо, наприклад, рядок потрібно використовувати у файлі, який має бути читабельним іншими системами.