Что не так? possible loss of data due to type conversion

 

Написал декодирование магика, а компиляция ругается. Что ей не нравится?

void  decode_ExpertMagic(ulong mag)
{
   string   strmag = IntegerToString(mag);
   
   if(StringLen(strmag) != 18) Print("MAGIC выбран вручную.");
   else
   {
      string   str_name, str_period, str_symbol, str_symb, string_symbol = "";
      int      num_name, num_period, num_symbol;
      
      for(int i = 1, k = 0; i <= 6; i++)
      {
         str_symb       = StringSubstr(strmag,k,2);
         k             += 2;
         num_symbol     = StringToInteger(str_symb); // матерится possible loss of data due to type conversion
         string_symbol += numCharDecode(num_symbol);
      }
      num_period        = StringToInteger(StringSubstr(strmag,12,3)); // матерится possible loss of data due to type conversion
      str_period        = numPeriodDecode(num_period);
      num_name          = StringToInteger(StringSubstr(strmag,15,3)); // матерится possible loss of data due to type conversion
      str_name          = numExpertNameDecode(num_name);
      
      Print("Советник "+str_name+" запущен на символе "+str_symbol+", период графика "+str_period);
   }
}
//+------------------------------------------------------------------+
string   numExpertNameDecode(int num)
{
   if(num == 703) return("MAS_2.13");
   else
.....
}
//+------------------------------------------------------------------+
string   numPeriodDecode(int tmf)
{
   if(tmf == 115)    return("M15");
   else
.....
}
//+------------------------------------------------------------------+
string   numCharDecode(int chr)
{
   if(chr == 11)  return("A");
   else
   if(chr == 12)  return("B");
   else
.....
}

Тем не менее отрабатывает почти правильно:

Советник MAS_2.13 запущен на символе 171226312914, период графика H3
 

Ошибку нашёл. Работает.

2018.10.22 18:25:11.630 Core 1  2018.04.22 00:00:00   Советник MAS_2.13 запущен на символе GBPUSD, период графика H1

Но предупреждения остались. Что ему не нравится?

 

Все верно не нравится.

Смотри:

num_symbol     = StringToInteger(str_symb); // матерится possible loss of data due to type conversion

Ты преобразуешь строку в long, а потом приравшиваешь к int - понятное дело, что возможны потери. Я бы тоже матерился...

 
Georgiy Merts:

Ты преобразуешь строку в long, а потом приравшиваешь к int - понятное дело, что возможны потери. Я бы тоже матерился... 

Блиииин. Голова два уха ))))))))))

Спасибо. Исправил.

 

У меня вроде с типами все ок, но ругается:

input string PAIR1 = "EURUSD";//Первая пара
int DIGIT_pair1=0;


int OnInit()
  {

        DIGIT_pair1 = SymbolInfoInteger(PAIR1,SYMBOL_DIGITS);// вот тут possible loss of data due to type conversion

   return(INIT_SUCCEEDED);
  }

А вот так нормально:

DIGIT_pair1= (int) SymbolInfoInteger(PAIR1,SYMBOL_DIGITS);

А все от того,  что SymbolInfoInteger - это long. Но мне long не нужен, т.к. далее использую 

tp = NormalizeDouble(tp,DIGIT_pair1);

где DIGIT_pair1 должен быть int. Короче не знаю, что сказать. Так всё закручено))

 

Помогите исправить possible loss of data due to type conversion:

string LowerCase(string value)

{

  int i, n;

  string st;

  st = value;

  for (i = 0; i < StringLen(st); i++)

  {

    n = StringGetChar(st, i);

    if (n >= 65 && n <= 90) st = StringSetChar(st, i, n + 32); // вот тут possible loss of data due to type conversion именно где подчёркнуто

  }

  return(st);

}



string UpperCase(string value)

{

  int i, n;

  string st;

  st = value;

  for (i = 0; i < StringLen(st); i++)

  {

    n = StringGetChar(st, i);

    if (n >= 97 && n <= 122) st = StringSetChar(st, i, n - 32); // вот тут possible loss of data due to type conversion именно где подчёркнуто

  }

  return(st);

}

 
Evgeniy Zhdan:

У меня вроде с типами все ок, но ругается:

А вот так нормально:

А все от того,  что SymbolInfoInteger - это long. Но мне long не нужен, т.к. далее использую 

где DIGIT_pair1 должен быть int. Короче не знаю, что сказать. Так всё закручено))

Где то было, что целые числа упрощенно представлены и требуют явного приведения типа или изначально правильного.

long DIGIT_pair1=0;

других путей не нашел, или явное приведение или изначально правильный тип целого.

Причина обращения: