Цитата:
Сообщение от
dech
P.S. Я думаю, во всех таких случаях используется функция any2str().
Там все немного заморочнее
X++:
static void Job287(Args _args)
{
str sDate;
anytype aDate = 11\12\2023;
str sReal;
anytype aReal = 1024.5678;
;
sDate = aDate;
sReal = aReal;
info(strFmt("sAdate = %1", sDate));
info(strFmt("aDate = %1", aDate));
info(strFmt("sReal = %1", sReal));
info(strFmt("aReal = %1", aReal));
// info(strFmt("any2str(aDate) = %1", any2str(aDate))); // ошибка
// info(strFmt("any2str(aReal) = %1", any2str(aReal))); // ошибка
}
выводит :
Цитата:
sAdate = 2023.12.11
aDate = 11.12.2023
sReal = 1024.5678
aReal = 1 024,57
В общем присваивание anytype к строке делает преобразование без учета региональных настроек юзера.
А any2str - никакого реального преобразования не делает. Эта функция - что-то типа Debug::assert() - только она проверяет что реально передана переменная строкового типа иначе выбрасывает исключение. Ну и конечно подсказывает компилятору какой имелся в виду тип, подавляя тем самым предупреждения компилятора. Поэтому для реального преобразования в строку мы писали свою функцию. strFmt не всегда подходит из-за строгого округления до 2 знаков после запятой для вещественных чисел.