Смени int func1() на double func1()
Vinin:
Смени int func1() на double func1()
Смени int func1() на double func1()
Хорошая шутка. :)
И почему название темы изменили? Это Вы думаете,что именно я что-то не понимаю в приведении типов? :)
Player_2:
И почему название темы изменили? Это Вы думаете,что именно я что-то не понимаю в приведении типов? :)
Ваш код именно это и показывает - непонимание приведения типов. Разделили целочисленное 10 на целочисленное 100, получили законный ноль, а потом заявляете про БАГ.
И почему название темы изменили? Это Вы думаете,что именно я что-то не понимаю в приведении типов? :)
MetaQuotes:
Ваш код именно это и показывает - непонимание приведения типов. Разделили целочисленное 10 на целочисленное 100, получили законный ноль, а потом заявляете про БАГ.
Player_2:
И почему название темы изменили? Это Вы думаете,что именно я что-то не понимаю в приведении типов? :)
И почему название темы изменили? Это Вы думаете,что именно я что-то не понимаю в приведении типов? :)
Ваш код именно это и показывает - непонимание приведения типов. Разделили целочисленное 10 на целочисленное 100, получили законный ноль, а потом заявляете про БАГ.
Вы программист? Языками программирования владеете?.
Переменной d1 типа double я присваиваю выражение типа double (10/100=0. 1 - число типа double). Получаю результат, как будто переменная d1 имеет тип int, хотя она была объявлена как double.
Это была не шутка, а дружеский совет.
Vinin:
Это была не шутка, а дружеский совет.
Это была не шутка, а дружеский совет.
Я здесь описываю баг, чтобы разработчики исправили его, а не ищу советов как его обойти. И вообще-то конкретно у меня баг имел несколько другую форму, я его здесь упростил, чтобы понятнее было в чём причина.
Vinin:
Это была не шутка, а дружеский совет.
A ему советы не нужны, ему бы лишь повыпендриваться...
Это была не шутка, а дружеский совет.
Player_2, в чем проблема? Все правильно:
d1=func1()/100;
Вначале вычисляется выражение справа от знака равенства (о том, что слева, компилятор еще не знает), а потом результат (целое число, здесь равное нулю) преобразуется в то, что слева, т. е. в тип double. Ты, наверно, думал, что выражение справа вычисляется вот так:
(double) func1()/100;
Mathemat:
Player_2, в чем проблема? Все правильно:
d1=func1()/100;
Вначале вычисляется выражение справа от знака равенства (о том, что слева, компилятор еще не знает), а потом результат (целое число, здесь равное нулю) преобразуется в тип того, что слева, т.е. double. Ты, наверно, думал, что выражение справа вычисляется вот так:
(double) func1()/100;
Аналогичный вопрос: языками программирования владеешь? В каком языке происходит также?
Из описания MQL :
Перед выполнением операций (кроме операций присваивания) происходит преобразование в тип, имеющий наибольший приоритет, а перед операциями присваивания - в целевой тип.
double d = 1 / 2.0; // выражение приводится к типу double, который совпадает с целевым типом, результат: 0.5
double d = 1 / 2; // выражение типа int приводится к целевому типу double, результат: 0.0
Хмм.. Действительно. Ты прав. Ну тогда вывод такой: в MQL не так как у людей.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Результат:
11:12:01 xxx GBPUSD,H1: func1()=10.00000000
11:12:01 xxx GBPUSD,H1: sim func1()/100=0.10000000
11:12:01 xxx GBPUSD,H1: true func1()/100=0.00000000