Vitalii Ananev Вы кажется не поняли что я уже нашел как решить эту проблему приведением типа до деления, просто я считаю что это неправильно 50/100 должно быть равно 0.5 это же не целочисленное деление
Sergey Dzyublik За открытость профиля, фриланс, продукты в маркете... или это скрытый сарказм?
Vitalii Ananev Вы кажется не поняли что я уже нашел как решить эту проблему приведением типа до деления, просто я считаю что это неправильно 50/100 должно быть равно 0.5 это же не целочисленное деление
Sergey Dzyublik За открытость профиля, фриланс, продукты в маркете... или это скрытый сарказм?
MQL язык построен на основе С++.
Соответственно, типизация языка аналогична до С++.
MQL, предположительно, имеет следующую типизацию: статическую, слабую, явную.
Статическая определяется тем, что конечные типы переменных и функций устанавливаются на этапе компиляции
Языки со слабой типизацией выполняют множество неявных преобразований автоматически, даже если может произойти потеря точности или преобразование неоднозначно.
Явно-типизированные языки отличаются тем, что тип новых переменных / функций / их аргументов нужно задавать явно.
- habr.com
тип новых переменных / функций / их аргументов нужно задавать явно
Вы видимо невнимательно прочитали вопрос, даже если у новой переменной тип задан явно double a = 50 / 100 все равно получим 0.0
Но все равно спасибо за ответ я уже понял что для Си подобных языков это нормально, и я каким то чудом не узнал об этой особенности раньше, хотя компилятор мог бы ругнутся на возможную потерю данных.
Vitalii Ananev Вы кажется не поняли что я уже нашел как решить эту проблему приведением типа до деления, просто я считаю что это неправильно 50/100 должно быть равно 0.5 это же не целочисленное деление
...
Я все понял. В моем сообщение был намек на то что при делении int на int происходит неявное преобразование типа и результат деления получается тоже int. Вы решили эту проблему используя явное приведение к нужному типу.
Вы видимо невнимательно прочитали вопрос, даже если у новой переменной тип задан явно double a = 50 / 100 все равно получим 0.0
Но все равно спасибо за ответ я уже понял что для Си подобных языков это нормально, и я каким то чудом не узнал об этой особенности раньше, хотя компилятор мог бы ругнутся на возможную потерю данных.
Какая потеря? 0 не теряет своей точности при присвоении в переменную любого типа.
Даже 1000000000 не потеряет точности при присвоении в переменную типа double
Если бы Вы почитали документацию https://www.mql5.com/ru/docs/basis/types/casting, Вы бы увидели там описание именно Вашего случая
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
MetaEditor 5 build 1946
Для проверки минимальный скрипт с кодом:
Выдает:
50 - может быть любая переменная с типом int, без приведения перед делением всегда выдает 0 даже если результат присваивается в double переменную.