MetaTrader 4. Build 173 - страница 4

 
2 Profi_R:
Посмотрел спецификацию MQL4, пообщался со спецом из MetaQuotes. Оказалось что все не совсем так как я представлял. :)
Целочисленного деления как операции (аналог операции div в Pascal-е) здесь нет, а результат деления зависит от типов операндов и от типа переменной в которую результат помещается. Т.е. если при делении результат запихивать в int, то он и будет целочисленным. По идее его даже нормализовывать для этого не надо. Остаток сам отвалится. :)
Но Ваша операция с помещением результата в tmp тоже будет работать без ошибки.
Функции же округления до целочисленного результата (MathCeil, MathRound) тоже почему-то в MQL4 имеют тип результата double. Я честно говоря в этом особой логики не вижу, но это факт.
Т.е. чтобы получить целое число, надо результат int-у присвоить. Если же целое надо как промежуточный результат в середине какого-либо арифметического выражения - боюсь пока никак не получится (надо ждать реализации явного преобразования типов).
В Вашем варианте нет ошибки в вычислении. Причина именно в SetIndexBuffer (в начальном куске кода этого фрагмента небыло). В хелпе MQL4 написано:
bool SetIndexBuffer( int index, double array[])
Т.е. эта функция требует использования массива с элементами типа double, поэтому вместе с SetIndexBuffer(0,All) надо использовать не int All[] а double All[]
 
В Вашем варианте нет ошибки в вычислении. Причина именно в SetIndexBuffer (в начальном куске кода этого фрагмента небыло). В хелпе MQL4 написано:
bool SetIndexBuffer( int index, double array[])
Т.е. эта функция требует использования массива с элементами типа double, поэтому вместе с SetIndexBuffer(0,All) надо использовать не int All[] а double All[]

Спасибо.
2All
Со мной можно проще, т.е. на "ты" :)
Причина обращения: