Кривое преобразование типов?

 

Ковыряю один советник, вижу вот такой код, мне глаза режут такие преобразования (string)times.year.

Насколько я прав или неправ?

MqlDateTime times;
   TimeToStruct(TimeCurrent(),times);
   string time="";
   string svrdate=(string)times.year+"."+(string)times.mon+"."+(string)times.day;
// я делаю всегда вот так
   string svrdate = IntegerToString(times.year) + "." + IntegerToString(times.mon) + "." + IntegerToString(times.day);
 
Alexey Volchanskiy:

Ковыряю один советник, вижу вот такой код, мне глаза режут такие преобразования (string)times.year.

Насколько я прав или неправ?

Оба метода имеют право на жизнь. Хотя я тоже делаю через IntegerToString(). Ведь преобразование числа в строку - это фишка чисто от MQL, в C++ такого нет.

 
Ihor Herasko:

Оба метода имеют право на жизнь. Хотя я тоже делаю через IntegerToString(). Ведь преобразование числа в строку - это фишка чисто от MQL, в C++ такого нет.

Я о том же, лучше использовать документированные методы. А то черт его знает, как это (string)times.year будет работать в будущем. Хорошо помню, как в старой версии MQL4 один чел любил называть переменные с точками, например 

int my.int.variable. Я ему говорил, не называй так, когда-нибудь сделают нормальный компилятор и все у тебя перестанет компилироваться. Так не слушал...потом все переделывал.

 
IntegerToString() - наверно, не важно. А вот DoubleToString() пытается вывести строку с ненужными иногда нулями. (string) же - выводит число "как есть".
 
Sergey Savinkin:
IntegerToString() - наверно, не важно. А вот DoubleToString() пытается вывести строку с ненужными иногда нулями. (string) же - выводит число "как есть".

так приводите к нужной точности

 
Sergey Savinkin:
IntegerToString() - наверно, не важно. А вот DoubleToString() пытается вывести строку с ненужными иногда нулями. (string) же - выводит число "как есть".

Там же можно задавать количество знаков после запятой

string s = DoubleToString(value, _Digits);
 

На мой взгляд, только через IntegerToString().

Прямое преобразование - мне также "режет глазах". И я также против использования его как раз потому, что хрен его знает, как оно будет работать.

 
Georgiy Merts:

На мой взгляд, только через IntegerToString().

Прямое преобразование - мне также "режет глазах". И я также против использования его как раз потому, что хрен его знает, как оно будет работать.

Ага, называется по умному undocumented behavior - недокументированное поведение.

 
Более того - на мой взгляд, на выходе мы должны получать строку из символов, а вовсе не символьное представление числа.
 
Georgiy Merts:
Более того - на мой взгляд, на выходе мы должны получать строку из символов, а вовсе не символьное представление числа.

Проверил таки )

MqlDateTime times;
TimeToStruct(TimeCurrent(), times);
string time = "";
string svrdate=(string)times.year+"."+(string)times.mon+"."+(string)times.day;
Print(svrdate);

Печатает 

2018.05.29 18:26:16.553 EnumTF (EURUSD,M1) 2018.5.29


 
Alexey Volchanskiy:

Ага, называется по умному undocumented behavior - недокументированное поведение.

Очень даже документированное: https://www.mql5.com/ru/docs/basis/types/casting

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...