866
x - числовое значение.
Обратите внимание, значение, возвращаемое функцией, является действительным числом
(типа double), в то же время в назначении функции указано, что функция возвращает
целое число. Это нужно понимать так, что функция возвращает действительное число, у
которого во всех разрядах после разделительной точки указаны нули. Например, функция
MathFloor() может вернуть 37.0 (положительное число типа double) или -4.0
(отрицательное число типа double).
В описании также указано, что функция возвращает максимальное из возможных чисел,
которое меньше заданного. Например, если значение передаваемого параметра х равно
13.5, то максимальное действительное число, имеющее после разделительной только
нули, равно 13.0. Если же в вызове функции указано отрицательное число -13.5, то
максимальное меньшее целое число равно -14.0. Таким образом, изменение знака
передаваемого параметра приводит к разным результатам, а именно, получаемые значения
не равны по модулю.
В некоторых случаях использование подобных функций оказывается очень удобным. Для
примера рассмотрим фрагмент расчёта количества лотов для новых ордеров:
int Percent =30; // % свободных средств
double Free =AccountFreeMargin(); // Свободные средства
double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//Стоим. 1 лота
double Step =MarketInfo(Symb,MODE_LOTSTEP); // Шаг изменен размера
double Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;
Значение переменной Percent задаётся пользователем. В данном случае пользователь
выделил для новых ордеров 30% свободных средств. В соответствии с правилами,
установленными дилинговым центром, правильно вычисленное количество лотов должно
быть кратно минимальному шагу изменения размера лотов (Step). Для расчёта
необходимы также значения свободных средств на счёте (Free) и стоимости одного лота
(One_Lot).
Рассмотрим логику рассуждений программиста, составившего формулу для расчёта
искомого количества лотов Lots_New для новых ордеров. Используем для наглядности
численные значения переменных. Пусть Free = 5000.0, One_Lot = 1360.0 (в большинстве
ДЦ стоимость 1 лота для валютной пары, в знаменателе которой USD, пропорциональна