Скачать MetaTrader 5

Ошибки с дробными числами

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пиши программы на заказ. Зарабатывай с помощью сервиса Фриланс!
Camnoce6e
42
Camnoce6e 2011.06.05 00:27 

При написании советника для работы с лотами от 0.01 до 0.99 столкнулся с проблемой присваивания переменным дробных чисел. Вместо того чтобы присвоить переменной значение 0.15 ей присваивается иногда значение совершенно другое, которое по алгоритму работы советника просто быть не может. Ошибки в самом советнике нет. Хотелось бы получить толковый совет как решить эту проблему. Ну и для примера еще кусочек кода

double Lot, Lot1, Lot2;

if(Lot1==Lot2)

{Lot=Lot1;}

Значения Lot1 и Lot2 вычисляются по разным алгоритмам и принимают значение от 0.01 до 0.99, при их равенстве значению Lot должно присваиваться значение Lot1, но это происходит не всегда. При работе с целыми числами такой проблемы нет, присвоение происходит нормально. При тестировании именно этого кусочка значения выводились на экран, так что я видел когда должно было произойти присвоение, а когда нет.

IgorM М
4801
IgorM М 2011.06.05 00:32  
Vladyslav Goshkov
2066
Vladyslav Goshkov 2011.06.05 07:08  
Camnoce6e:

При написании советника для работы с лотами от 0.01 до 0.99 столкнулся с проблемой присваивания переменным дробных чисел. Вместо того чтобы присвоить переменной значение 0.15 ей присваивается иногда значение совершенно другое, которое по алгоритму работы советника просто быть не может. Ошибки в самом советнике нет. Хотелось бы получить толковый совет как решить эту проблему. Ну и для примера еще кусочек кода

double Lot, Lot1, Lot2;

if(Lot1==Lot2)

{Lot=Lot1;}

Значения Lot1 и Lot2 вычисляются по разным алгоритмам и принимают значение от 0.01 до 0.99, при их равенстве значению Lot должно присваиваться значение Lot1, но это происходит не всегда. При работе с целыми числами такой проблемы нет, присвоение происходит нормально. При тестировании именно этого кусочка значения выводились на экран, так что я видел когда должно было произойти присвоение, а когда нет.

Может начать награждать званиями типа "лентяй" или соской авторов подобных постов ? А то, похоже, остальные усилия успеха не имеют: опять по сотне раз одно и то же.....
Виктор
Модератор
6559
Виктор 2011.06.05 07:59  
VladislavVG:
Может начать награждать званиями типа "лентяй" или соской авторов подобных постов ? А то, похоже, остальные усилия успеха не имеют: опять по сотне раз одно и то же.....
Это жизнь. Мудрый Рош, когда мы затеяли ФАК сказал что-то типа: "Дурная работа, бог в помощь! Кто не читает справку, тот и ФАК читать не будет"
Camnoce6e
42
Camnoce6e 2011.06.05 14:15  

Да я лентяй, поэтому изучаю язык MQL4 и пишу советник, мне лень самому выставлять ордера и анализировать рынок. А вот из за таких постов становится проблематично найти необходимую инфу.

ЛЕНЬ - ДВИГАТЕЛЬ ПРОГРЕССА

Victor Nikolaev
Модератор
14483
Victor Nikolaev 2011.06.05 14:25  
Camnoce6e:

Да я лентяй, поэтому изучаю язык MQL4 и пишу советник, мне лень самому выставлять ордера и анализировать рынок. А вот из за таких постов становится проблематично найти необходимую инфу.

ЛЕНЬ - ДВИГАТЕЛЬ ПРОГРЕССА


В данном случае - это тормоз
Vladimir
62
Vladimir 2011.06.05 14:32  
Camnoce6e:

Да я лентяй, поэтому изучаю язык MQL4 и пишу советник, мне лень самому выставлять ордера и анализировать рынок. А вот из за таких постов становится проблематично найти необходимую инфу.

ЛЕНЬ - ДВИГАТЕЛЬ ПРОГРЕССА

А почему не

if(NormalizeDouble(lot1,2)==NormalizeDouble(lot2,2)) ??

или интересней:

double lt1, lt2;

lt1=NormalizeDouble(lot1,2);

lt2=NormalizeDouble(lot2,2);

if(lt1==lt2)

{

}

Vladyslav Goshkov
2066
Vladyslav Goshkov 2011.06.05 15:30  
Camnoce6e:

Да я лентяй, поэтому изучаю язык MQL4 и пишу советник, мне лень самому выставлять ордера и анализировать рынок. А вот из за таких постов становится проблематично найти необходимую инфу.

ЛЕНЬ - ДВИГАТЕЛЬ ПРОГРЕССА

Если б Вы ее (необходимую информацию) пробовали искать, то разговор был бы совсем другой. И вопросы Ваши сформулированы были б по-другому. Тогда и такой бы реакции не последовало.
Camnoce6e
42
Camnoce6e 2011.06.06 15:10  
Всем огромное спасибо. Просто я начинаю учить язык MQL4 и не знаю многих тонкостей его работы и уж никак не думал что работа с числами с плавющей запятой будет проблемой. Хотя такая же проблема существует и у языка С++ на базе которого написан этот.
Fedor
2763
Fedor 2011.06.06 15:13  
Ничто не даётся так дёшево и не ценится так дорого как вежливость.
Дмитрий
1460
Дмитрий 2011.06.06 19:38  
В свое время отказался от сравнивания таких чисел в пользу сравнения их разницы с пороговым значением, что аналогично приему с нормализацией.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий