Miklix

Перетворення дійсного рядка з усіма десятковими дробами в 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. Тут також є кілька варіантів, з опціями розширеного форматування та без них, але якщо вам потрібне просто перетворення дійсного числа в рядок, цього буде достатньо:

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Закріпити на Pinterest

Міккель Крістенсен

Про автора

Міккель Крістенсен
Міккель - творець і власник сайту miklix.com. Він має понад 20 років досвіду роботи професійним програмістом/розробником програмного забезпечення і наразі працює на повну ставку у великій європейській ІТ-корпорації. У вільний від ведення блогу час він присвячує різноманітним інтересам, хобі та захопленням, що певною мірою відображається на різноманітності тем, які висвітлюються на цьому сайті.