Как в mql округлить число до десятков? NormalizeDouble не подходит

 
(int(x)/10)*10
 
Anton Sokolov:

Как в mql превратить цену 1652.25 в 1650, 1625,2 в 1620 и т.д. округлить до десятков

NormalizeDouble не подходит

Первый вариант

int a = MathFloor(1652.25/10)*10.0;

Второй вариант.

int a = (int)(1625.2/10)*10;

не проверен, но не должен округлять в большую сторону...

 
Alexander Laur:

число в формате деубле не всеглв правильно делится

 

у меня похожий вопрос: пчему при округлении до 5 цифры после запятой все равно нет нет и проскакивает число с большим количеством цифр...


double sint_value;
double in_a;
double in_b; // это все цены с 5 знаками.....
sint_value = NormalizeDouble(in_a / in_b, 5);

 
nowi:

у меня похожий вопрос: пчему при округлении до 5 цифры после запятой все равно нет нет и проскакивает число с большим количеством цифр...



А как Вы об этом узнаете? Наверное, распечатываете. Учтите, что при распечатке значения уже производится преобразование числа, а потому будет видно не совсем то, что там реально есть.
 
через comment
 
nowi:

у меня похожий вопрос: пчему при округлении до 5 цифры после запятой все равно нет нет и проскакивает число с большим количеством цифр...



Проблема вывода, его невозможно посмотреть. Но можно убедится, что в числе нет ничего лишнего через if и == или !=. 
 

Вроде задачю решил с помощью  MathRound

   CurrentPrice = 10*MathRound(Bid/10);                               // Текущая цена

 
Anton Sokolov:

Вроде задачю решил с помощью  MathRound


int a = MathFloor(1652.25/10)*10.0;

вам сразу дали это решение вторым постом)))) только все одну и туже формулу записали по разному.

отличие только в том, как будет округляться  число прежде чем отбросите последнюю цифру. 

 

решал...

double d = 0.01;
Print(string(d));
Print(DoubleToString(d));

Принтило по разному)

Причина обращения: