Преобразование вещественного числа в строку со всеми десятичными знаками в Dynamics AX 2012
Опубликовано: 16 февраля 2025 г. в 10:40:54 UTC
Последнее обновление: 12 января 2026 г. в 08:50:58 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 использует текущие локали системы в отношении символа десятичной точки. Для вас это может не быть проблемой, но для меня, живущего в регионе, где в качестве десятичного разделителя используется запятая, а не точка, может потребоваться дополнительная обработка, если, например, строку необходимо использовать в файле, который должен быть читаемым другими системами.
Дополнительное чтение
Если вам понравился этот пост, вам также могут понравиться эти предложения:
- Как перебрать элементы перечисления из кода X++ в Dynamics AX 2012
- Определение класса документа и запроса для службы AIF в Dynamics AX 2012
- Использование запроса в классе контракта данных SysOperation в Dynamics AX 2012
