Перетворення дійсного рядка з усіма десятковими дробами в Dynamics AX 2012
Опубліковано: 16 лютого 2025 р. о 10:41:03 UTC
Останнє оновлення: 12 січня 2026 р. о 08:52:26 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 використовує поточну локаль системи щодо символу десяткової коми. Для вас це може не бути проблемою, але для мене, який живе в місцевості, де використовується кома, а не крапка як роздільник десяткової коми, це може вимагати подальшої обробки, якщо, наприклад, рядок потрібно використовувати у файлі, який має бути читабельним для інших систем.
Додаткова література
Якщо вам сподобався цей пост, вам також можуть сподобатися ці пропозиції:
- Визначення класу документа та запиту для служби AIF у Dynamics AX 2012
- Видалення юридичної особи (облікових записів компаній) у Dynamics AX 2012
- Форматування рядків за допомогою Macro і strFmt в Dynamics AX 2012
