про DoubleToStr я знаю, но мне не надо значения приводить к стрингу, в логах
2009.03.27 11:53:14 xxxxxx EURUSD,M1: #2 (ShiftP - Close[i]) = 0.00060000 (Porog*Point) = 0.00030000 n= 2.00000000 1
значения 2.00000000 я специально не стал приводить в операторе Print чтобы посмотреть результат операции.
проблема вот в этой строке
int n = DownP / RPorog
если делить 0.00060000 на 0.00030000 и привести к целому типу получается 1
Доброго время суток.
Пишу эксперт, столкнулся с проблемой некорректного вычисления и преобразования типов. Пока столкнулся с двумя проблемами:
1. 1. Вот кусок кода в котором вычисляются два значения и потом сравниваются между собой оператором >=
Проблема в том что когда оба значения и равны допустим 0.0003 то операция имеет значения ЛОЖЬ. Вот кусок кода и лог журнала
Вместо
double RPorog = Porog*Point;
Напиши
double RPorog = (Porog - 0.5)*Point;
2.
2. Другая проблема которая возникла в том же куске кода это вычисления целого после деления
допустим когда мы делим 0.0006 на 0.0003 по по логике должны получить цело число 2, но из лога видно что переменная n после присваивания имеет значения 1.
int n = DownP / RPorog + 0.5;
Это не логика языка, это логика работы с double числами.
Я пока не видел такого, чтобы с floating point числами не было проблем при сравнении и неявном преобразовании к целому.
Вобщем на язык грешить не надо, он ни при чем.
про DoubleToStr я знаю, но мне не надо значения приводить к стрингу, в логах
значения 2.00000000 я специально не стал приводить в операторе Print чтобы посмотреть результат операции.
проблема вот в этой строке
если делить 0.00060000 на 0.00030000 и привести к целому типу получается 1
double pd1=0.00060000; double pd2=0.00030000; double pd3= pd1 / pd2; int pint= pd1 / pd2; string ps=StringConcatenate( " pd3=", DoubleToStr(pd3,8) ," pint=", DoubleToStr(pint,8) ); Print(ps);
результат: pd3=2.00000000 pint=2.00000000
мож я чё не так сделал или комп не верно считает, но единица не получается!?
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго время суток.
Пишу эксперт, столкнулся с проблемой некорректного вычисления и преобразования типов. Пока столкнулся с двумя проблемами:
1. 1. Вот кусок кода в котором вычисляются два значения и потом сравниваются между собой оператором >=
Проблема в том что когда оба значения и равны допустим 0.0003 то операция имеет значения ЛОЖЬ. Вот кусок кода и лог журнала
а вот лог
но if не сработал и в журнале нет следующего лога Print("#2…
2.
2. Другая проблема которая возникла в том же куске кода это вычисления целого после деления
допустим когда мы делим 0.0006 на 0.0003 по по логике должны получить цело число 2, но из лога видно что переменная n после присваивания имеет значения 1.
2009.03.27 11:53:14 xxxxxx EURUSD,M1: #2 (ShiftP - Close[i]) = 0.00060000 (Porog*Point) = 0.00030000 n= 2.00000000 1
Сломал все мозги, но пока не понял как решить эти проблемы, читал доки но по ним я делаю все правильно, но результат получаю совершенно другой.
Надеюсь что кто-то подскажет где я ошибаюсь.