Ошибка при вычислении

 
Доброго времени суток. Написано такое уравнение в советнике, но оно выдает 0, не могу понять почему) Подскажите пожалуйста(
int Kolvo_Barov1=288;
double proc=0;
      proc=100/Kolvo_Barov1;
 
int Kolvo_Barov1 = 288;
double proc = 0;
proc = 100.0 / Kolvo_Barov1;
 
 
Спасибо, помогло)
 

Форум по трейдингу, автоматизированным торговым системам и тестированию торговых стратегий

Редкая проблема с кодом

Фернандо Каррейру , 2021.07.23 22:20

Пожалуйста, поймите, что деление на 100 или деление на 100,0 даст совершенно разные результаты.

В первом случае 100 считается целочисленной константой-литералом и поэтому будет выполнять целочисленное деление, которое усекает десятичные значения.

В последнем случае 100.0 будет считаться константой с плавающей запятой и будет выполнять деление с плавающей запятой, сохраняя десятичные значения.

Это основная причина проблем, с которыми вы сталкиваетесь. Поэтому, чтобы предотвратить это, либо используйте литеральную константу с плавающей запятой, либо приведите переменную к типу (double).

Пример:

 Print ( "90   / 100   = " , 90    / 100    );
Print ( "90   / 100.0 = " , 90    / 100.0 );
Print ( "90.0 / 100   = " , 90.0 / 100    );
Print ( "90.0 / 100.0 = " , 90.0 / 100.0 );
2021.07 . 23 21 : 26 : 57.060 TestCopy EURUSD,H1: 90    / 100    = 0
2021.07 . 23 21 : 26 : 57.060 TestCopy EURUSD,H1: 90    / 100.0 = 0.9
2021.07 . 23 21 : 26 : 57.060 TestCopy EURUSD,H1: 90.0 / 100    = 0.9
2021.07 . 23 21 : 26 : 57.060 TestCopy EURUSD,H1: 90.0 / 100.0 = 0.9 

Форум по трейдингу, автоматизированным торговым системам и тестированию торговых стратегий

MT4 принудительно переводит двойные значения в int

Фернандо Каррейру , 2022.03.23 17:53

Приведение типов к плавающей запятой — Приведение типов - Типы данных - Основы языка - Справочник MQL4

 double Average = ( double ) Bars /          Found;
double Average =           Bars / ( double ) Found;
double Average = ( double ) Bars / ( double ) Found;
Причина обращения: