MetaTrader 4 Build 1147, приведение типов при делении

 
MetaTrader 4 Build 1147

MetaEditor 5 build 1946

Для проверки минимальный скрипт с кодом:

#property strict

void OnStart(){
   Print("50 / 100 = ",50 / 100);
   Print("(double)50 / 100 = ",(double)50 / 100);
}

Выдает:

(double)50 / 100 = 0.5
50 / 100 = 0

50 - может быть любая переменная с типом int, без приведения перед делением всегда выдает 0 даже если результат присваивается в double переменную.

 
Evgenii Kuznetsov:
MetaTrader 4 Build 1147

MetaEditor 5 build 1946

Для проверки минимальный скрипт с кодом:

Выдает:

50 - может быть любая переменная с типом int, без приведения перед делением всегда выдает 0 даже если результат присваивается в double переменную.

Попробуйте 50.0/100.0

 
Evgenii Kuznetsov:

50 - может быть любая переменная с типом int, без приведения перед делением всегда выдает 0 даже если результат присваивается в double переменную.

А откуда, если не секрет, у вас такой рейтинг?

 

Vitalii Ananev Вы кажется не поняли что я уже нашел как решить эту проблему приведением типа до деления, просто я считаю что это неправильно 50/100 должно быть равно 0.5 это же не целочисленное деление

Sergey Dzyublik За открытость профиля, фриланс, продукты в маркете... или это скрытый сарказм?

 
Evgenii Kuznetsov:

Vitalii Ananev Вы кажется не поняли что я уже нашел как решить эту проблему приведением типа до деления, просто я считаю что это неправильно 50/100 должно быть равно 0.5 это же не целочисленное деление

Sergey Dzyublik За открытость профиля, фриланс, продукты в маркете... или это скрытый сарказм?

MQL язык построен на основе С++.
Соответственно, типизация языка аналогична до С++.
MQL, предположительно, имеет следующую типизацию: статическую, слабую, явную.

Статическая определяется тем, что конечные типы переменных и функций устанавливаются на этапе компиляции

Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно.

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

Ликбез по типизации в языках программирования
Ликбез по типизации в языках программирования
  • habr.com
Эта статья содержит необходимый минимум тех вещей, которые просто необходимо знать о типизации, чтобы не называть динамическую типизацию злом, Lisp — бестиповым языком, а C — языком со строгой типизацией. В полной версии находится подробное описание всех видов типизации, приправленное примерами кода, ссылками на популярные языки...
 
Sergey Dzyublik:

тип новых переменных / функций / их аргументов нужно задавать явно

Вы видимо невнимательно прочитали вопрос, даже если у новой переменной тип задан явно  double a = 50 / 100 все равно получим 0.0 

Но все равно спасибо за ответ я уже понял что для Си подобных языков это нормально, и я каким то чудом не узнал об этой особенности раньше, хотя компилятор мог бы ругнутся на возможную потерю данных.

 
Evgenii Kuznetsov:

Vitalii Ananev Вы кажется не поняли что я уже нашел как решить эту проблему приведением типа до деления, просто я считаю что это неправильно 50/100 должно быть равно 0.5 это же не целочисленное деление

...

Я все понял. В моем сообщение был намек на то что при делении int на int происходит неявное преобразование типа и результат деления получается тоже int. Вы решили эту проблему используя явное приведение к нужному типу.

 
Evgenii Kuznetsov:

Вы видимо невнимательно прочитали вопрос, даже если у новой переменной тип задан явно  double a = 50 / 100 все равно получим 0.0 

Но все равно спасибо за ответ я уже понял что для Си подобных языков это нормально, и я каким то чудом не узнал об этой особенности раньше, хотя компилятор мог бы ругнутся на возможную потерю данных.

Какая потеря? 0 не теряет своей точности при присвоении в переменную любого типа.

Даже 1000000000 не потеряет точности при присвоении в переменную типа double

Если бы Вы почитали документацию https://www.mql5.com/ru/docs/basis/types/casting, Вы бы увидели там описание именно Вашего случая

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