Получаем количество десятичных знаков после запятой любых чисел (не только котировок) в обход Digits() на MQL4 и MQL5 - страница 4

 
void OnStart()
{
        double price =  500000000.0001;
        Print( price, ":", d( price ));
}

Результат: 500000000.0001:4

4, но не 8

 
Ну и ладненько... Купайтесь в этой радости, коль нравится. 
 
A100:

Угадали. И сколько здесь знаков после запятой? 8?

Меня не нужно проверять.

  Print(NormalizeDouble(1234567890 + 1e-7, 8) == 1234567890); // true
  Print(1234567890 + 1e-7 == 1234567890); // true
 
fxsaber:

Меня не нужно проверять.

Тем не менее свой код Вы исправили - значит проверка пошла на пользу

 
Print ( 12345+1e-7) 
 
A100:

Тем не менее свой код Вы исправили

Посмотрите, откуда код был выдран. И для каких практических целей он был предназначен. Если не ясно - для цен.

Защиты от дурака в коде не было, т.к. не предусматривалось, что его будет использовать такой пользователь.

В ходе обсуждения оказалось, что защиту от дурака надо ставить, если выкладываешь в паблик. Иначе срача на 5 страниц.

Так что, действительно, поправил. Еще раз, числа с бесконечным Digits - это норма.

 
Dmitry Fedoseev:

Как работает NormalizeDouble знаю, т.к. воспроизводил ее полный аналог.

Все сильно зависит от того, Digits чего нужно получить. Если double-представления, то Ваш код выдает другое значение. Если же digits числовой константы - правильно (и то, не всегда).

 
Ну, вот, опять пипетками меряются... 
 
fxsaber:

Все сильно зависит от того, Digits чего нужно получить.

Нужна такая

int f( double );

чтобы (в частности)

void OnStart()
{
        Print( f( NormalizeDouble( 500000000.0001, 4 )));
}

результат был равен: 4

 
A100:

Нужна такая

чтобы

результат был равен: 4

Возможно, Вам именно такая функция и нужна. Отвечал же ТС

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