Не работает нормализация цены

 

 Вот простейший метод OnTick():

void OnTick() {
  if (lastBarTime != Time[0]) {
  
    for (int i = 0; i < 15; i++) {
      double ZZPrice = ND(iCustom(NULL, PERIOD_M30, "ZZ_mtf", 0, i));
      if (ZZPrice == EMPTY_VALUE) continue;
//      Print("ND(ZZPrice[", i, "]) = ", ND(ZZPrice));
      Print("ND(ZZPrice[", i, "]) = ", NormalizeDouble(ZZPrice, _Digits));
//      Print("Digits = ", Digits);
    }
    lastBarTime = Time[0];
  }
}

Как-то первый раз я такое вижу, что бы не нормализовывалось значение какой-нить цены. В данном случает я цену получю от индикатора. Вижу в журнале экспертов:

2018.04.05 19:46:38.646 onMA AUDUSDm,M30: ND(ZZPrice[13]) = 0.76781

2018.04.05 19:46:38.646 onMA AUDUSDm,M30: ND(ZZPrice[10]) = 0.76918

2018.04.05 19:46:38.646 onMA AUDUSDm,M30: ND(ZZPrice[8]) = 0.7678199999999999

2018.04.05 19:46:38.646 onMA AUDUSDm,M30: ND(ZZPrice[6]) = 0.76938

2018.04.05 19:46:38.646 onMA AUDUSDm,M30: ND(ZZPrice[4]) = 0.76736

2018.04.05 19:46:37.842 onMA AUDUSDm,M30: initialized

2018.04.05 19:46:37.826 Expert onMA AUDUSDm,M30: loaded successfully

Как такое вообще получается? Я о цене 0.7678199999999999

Раньше такого я не наблюдал ни разу..

 
hoz:

 Вот простейший метод OnTick():

Как-то первый раз я такое вижу, что бы не нормализовывалось значение какой-нить цены. В данном случает я цену получю от индикатора. Вижу в журнале экспертов:

Как такое вообще получается? Я о цене 0.7678199999999999

Раньше такого я не наблюдал ни разу..

DoubleToString для вывода на принт и коммент

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
hoz:

Как такое вообще получается? Я о цене 0.7678199999999999

не правильно Print

преобразовать нужно в string

а нормализация работает нормально

 
Vitaly Muzichenko:

DoubleToString для вывода на принт и коммент

Ну так изначально в этом числе 16 знаков после запятой. Но после нормализации остаётся цже 8. Почему тогда при выводе напечать остаётся 16, если не использовать DoubleToString ?

 
hoz:

Ну так изначально в этом числе 16 знаков после запятой. Но после нормализации остаётся цже 8. Почему тогда при выводе напечать остаётся 16, если не использовать DoubleToString ?

Почитайте

А вообще, на форуме 100500 веток на эту тему. Не ленитесь использовать поиск, это быстрее, чем задавать простейшие вопросы, на которые есть куча ответов.

NormalizeDouble (0.0123456, 2) =&gt; 0.0123456 Что за недоделки?
NormalizeDouble (0.0123456, 2) =&gt; 0.0123456 Что за недоделки?
  • 2014.09.10
  • www.mql5.com
Общее обсуждение: NormalizeDouble (0.0123456, 2) => 0.0123456 Что за недоделки?
Причина обращения: