Ошибки, баги, вопросы - страница 2197

 

Сколько символов, или знаков допускается ввести в поле input переменной? В документации ограничений не нашёл. Но по факту еть проблемы.

Вот, по умолчанию, поставлено 15 символов включая точку.

Но если попытаться ввести другое число такой-же размерности, то последняя цифра не вводится.

Кто-то может дать объяснение?

2018.04.18 10:02:48.867 Terminal        MetaTrader 5 x64 build 1795 started (MetaQuotes Software Corp.)
2018.04.18 10:02:48.867 Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9409 / 12255 Mb, Disk: 40 / 238 Gb, GMT+3
2018.04.18 10:02:48.867 Terminal        D:\MetaTrader 5\New MT5
Терминал в /portable режиме.
 
Числовые значения парсятся из tpl-файлов. Скорее всего, StringToDouble обладает подобными ограничениями.
 
fxsaber:
Числовые значения парсятся из tpl-файлов. Скорее всего, StringToDouble обладает подобными ограничениями.

Я сейчас проверил такой вариант: Ввёл input string и преобразовал строку в число StringToDouble... - проблем не обнаружено.

Или я что-то не так понял в вашем ответе.

 
Alexey Viktorov:

Я сейчас проверил такой вариант: Ввёл input string и преобразовал строку в число StringToDouble... - проблем не обнаружено.

Или я что-то не так понял в вашем ответе.

Попробуйте сохранить шаблон с советником. В tpl-файле задать длинное число и после применения измененного шаблона посмотреть, как это число воспринимает советник.

 
fxsaber:

Попробуйте сохранить шаблон с советником. В tpl-файле задать длинное число и после применения измененного шаблона посмотреть, как это число воспринимает советник.

Это запуск скрипта.

А на вашем терминале пропускает число длиннее 14ти знаков?

 
Alexey Viktorov:

Это запуск скрипта.

Без разницы

А на вашем терминале пропускает число длиннее 14ти знаков?

#property script_show_inputs

input double Double = 1234567890.123456789;

void OnStart()
{  
  Print(Double);
}


При вводе, как оказалось, зависит от того, какие цифры набираешь. Некоторые не позволяет набирать. А что-то - позволяет.

 
fxsaber:

Без разницы


При вводе, как оказалось, зависит от того, какие цифры набираешь. Некоторые не позволяет набирать. А что-то - позволяет.

Странное поведение... Если набрать целую часть числа меньше 12ти знаков, то может пропустить общее количество больше 14ти.

Подождём что ответят разработчики.

 
Прошу помощи сделать простую вещь
class A
{
public:  
  int i;
  
  A* operator *( const A &Value ) const
  {
    A* Res = new A;
    
    Res.i = this.i * Value.i;
    
    return(Res);
  }
};

void OnStart()
{
  A a, b, c;
  
  a.i = 2;
  b.i = 3;
  c.i = 5;
  
  A* d = a * b * c;
  
  Print(d.i); // 30
  
  delete d;
}

В коде хорошо видно, что должна быть утечка памяти. И именно это и происходит. Однако, как написать правильно, чтобы можно было "перемножать" объекты? С оператором "*=" все понятно, как и ясно в случае структур. А с классами как реализовать этот простой функционал?


ЗЫ А этот код

class A
{
private:
  A Tmp;
  
public:
  int i;
  
  A* operator *( const A &Value )
  {
    this.Tmp.i = this.i * Value.i;
    
    return(&Tmp);
  }
};

void OnStart()
{
  A a, b, c;
  
  a.i = 2;
  b.i = 3;
  c.i = 5;
  
  A* d = a * b * c;
  
  Print(d.i); // 30
}

Крашит ME по F7 и убивает Терминал по F5. Почему же мне так везет?!

 
fxsaber:

ЗЫ А этот код

Крашит ME по F7 и убивает Терминал по F5. Почему же мне так везет?!

class A
{
private:
  A Tmp;
  
public:
  int i;
  
  A* operator *( const A &Value )
  {
    this.Tmp.i = this.i * Value.i;
    
    return(&Tmp);
  }
};

void OnStart()
{
  A a, b, c;
  
  a.i = 2;
  b.i = 3;
  c.i = 5;
  
  A* d = a * b * c;
  
  Print(d.i); // 30
}

Возможно бесконечная рекурсия и переполнение стека.

 
Sergey Dzyublik:

Возможно бесконечная рекурсия и переполнение стека.

Безусловно, проблема в выделенном, но причина, похоже, глубже.

И во время выполнения, очевидно, никакой рекурсии быть не должно.