Преобразование вещественного числа в строку со всеми десятичными знаками в Dynamics AX 2012
Опубликовано: 16 февраля 2025 г. в 10:40:54 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 использует текущую локаль системы относительно символа десятичной точки. Для вас это может не быть проблемой, но для меня, живущего в регионе, где в качестве десятичного разделителя используется запятая, а не точка, может потребоваться дополнительная обработка, если, например, строку нужно использовать в файле, который должен быть доступен для чтения другим системам.