Баг: остаток от деления для double

 

MetaEditor bulid 1395 не компилирует выражение

Print(17.5%2); 

выдает ошибку '%' - illegal operation use, целое число перед %

Print(17%2); 

компилирует.  От double в mql нельзя брать остаток от деления? Это прикол такой? :)))


PS изначальная задача создать функцию is_int {return (x%1 == 0)}

 
threat:  задача создать функцию is_int {return (x%1 == 0)}

(x-int(x))==0

 

Я только сейчас вспомнил, что нарывался на эту проблему. Но надо было срочно заканчивать проект, я написал так

 Print(fmod(17.5, 2));

числа вставил ваши. Проблема была решена и я удачно о ней забыл...

Соответственно

bool is_int(double x) {return(fmod(x, 1) == 0);}
 

Очень интересно, какой предполагается результат в виде остатка от деления 17.5 на 2? 

0.1 или 1.5? 

 

MathMod

Returns the real remainder after the division of two numbers


https://www.mql5.com/en/docs/math

1. MQL - строгая типизация
2. дубовый способ проверки, но как-то так можно


bool isInt(string number)  //  по-другому неопределенный тип наверное задать нельзя
{
    string parts[];
    StringSplit(number, '.', parts);
    return ArraySize(parts) == 1;

}

// ... or ...

bool isInt<T>(T number)
{

    return MathMod(number, 2);

}

// ... or ...

bool isInt(double number)
{

    return number == (int) number;

}

Documentation on MQL5: Math Functions
Documentation on MQL5: Math Functions
  • www.mql5.com
Math Functions - Reference on algorithmic/automated trading language for MetaTrader 5