Использую версию 4, билд 160.
В MetaTrader 3.xx этих проблем не наблюдается.
В MetaTrader 3.xx этих проблем не наблюдается.
Все верно - так и задумано. Если хотите использовать double константы, то просто пишите
Там все переменные одного типа double.
double s=2147483648.0;
В MetaTrader 3.xx этих проблем не наблюдается.
Там все переменные одного типа double.
Спасибо за ответ.
Это жутко неудобно. Ни в одном языке такого нет (ни в СИ, ни в Делфи). Странно, что так было задумано. Да и в словаре метатрейдера в описании типа double приведено такое описание:
An unimportant fractional part with the dot can be absent.
double d = 16;
Получается, что это утверждение "An unimportant fractional part with the dot can be absent." неверно. И пример 'double d = 16' не есть корректный.
Это жутко неудобно. Ни в одном языке такого нет (ни в СИ, ни в Делфи). Странно, что так было задумано. Да и в словаре метатрейдера в описании типа double приведено такое описание:
An unimportant fractional part with the dot can be absent.
double d = 16;
Получается, что это утверждение "An unimportant fractional part with the dot can be absent." неверно. И пример 'double d = 16' не есть корректный.
Это жутко неудобно.
Сколько лет программирую, давно привык - вещественные константы пишу всегда явно с точкой. Неудобств никаких не ощущаю.
Но почему бы не сделать так, как в любом другом языке (в том же СИ, сходство с которым задекларировано).
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ошибка связана с тем, что все числа double без точки и знаков после запятой, программа идентифицирует всегда, как тип int с соответсвующими ограничениями. Проблема даже возникает в ходе выполнения программы, когда результатом операции есть число double без дробной части, что приводит к невозможности оперирования числами типа double в программе.
Проиллюстрирую наглядно.
1)
В данном случае я переменной s присваиваю граничное значение типа int '2147483647'.
#property indicator_chart_window
int start()
{
double s=2147483647;
Comment(s);
}
При этом результат выводится корректный '2147483647'.
2) Даже при увеличении значения переменной на 1 единицу (значение выходит за пределы типа int), результат стаёт некорректный:
#property indicator_chart_window
int start()
{
double s=2147483648;
Comment(s);
}
При этом результат в Comment выдаётся со знаком минус '-2147483648'.
А в случае дальнейшего увеличения значения переменной s, например при double s=3147483648 результат совсем искажается и в комментарии мы имеем значение '-1147483648' вместо '3147483648'
При этом при указании "double s=2147483648.0" результат появляется корректный, но ведь в программе в ходе вычислений в случае, если результатом операций есть число без дробной части, то дальше оно уже в программе не может использоваться..