Показать сообщение отдельно
Старый 28.04.2023, 07:55   #471  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от 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 знаков после запятой для вещественных чисел.

Последний раз редактировалось Logger; 28.04.2023 в 07:58.
За это сообщение автора поблагодарили: S.Kuskov (5).