NormalizeDouble, Глюк?

 

Почемуто больше 4 цифр после запятой не дает.Проверял следующим кодом.

double var=0.123456789;
for(i=0;i<8;i++)
{
Print(" Digits = ",i,"-->",NormalizeDouble(var,i));
}

2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 7-->0.1235
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 6-->0.1235
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 5-->0.1235
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 4-->0.1235
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 3-->0.123
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 2-->0.12
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 1-->0.1
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 0-->0

 
4ebur:

Почемуто больше 4 цифр после запятой не дает.Проверял следующим кодом.

double var=0.123456789;
for(i=0;i<8;i++)
{
Print(" Digits = ",i,"-->",NormalizeDouble(var,i));
}

2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 7-->0.1235
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 6-->0.1235
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 5-->0.1235
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 4-->0.1235
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 3-->0.123
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 2-->0.12
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 1-->0.1
2006.05.13 01:04:31 txInd USDCHF,Daily: Digits = 0-->0

Посмотрите здесь https://docs.mql4.com/ru/common/Print
------------------------------
void Print( ...)
Печатает некоторое сообщение в журнал экспертов. Параметры могут иметь любой тип. Количество параметров не может превышать 64.

Массивы нельзя передать в функцию Print(). Массивы должны быть напечатаны поэлементно.

Данные типа double выводятся с 4 десятичными цифрами после точки. Чтобы получить большую точность, следует использовать функцию DoubleToStr().
Данные типов bool, datetime и color будут напечатаны в виде чисел.
Чтобы печатать значения datetime как строку с датой, следует использовать функцию TimeToStr().
------------------------------
 

double NormalizeDouble( double value, int digits)
Округление числа с плавающей запятой до указанной точности.
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров должны быть нормализованы с точностью, значение которой хранится в предопределенной переменной Digits.
Параметры:
value - Величина с плавающей точкой.
digits - Формат точности, число цифр после десятичной точки (0-8).

Пример:
double var1=0.123456789;
Print(NormalizeDouble(var1,5));
// вывод: 0.12346



реальный вывод после этого действия 0.1235

 
4ebur:

Пример:
double var1=0.123456789;
Print(NormalizeDouble(var1,5));
// вывод: 0.12346



реальный вывод после этого действия 0.1235

Так выводом то занимается функция Print, а не NormalizeDouble, не так ли?
И по умолчанию Print выводит числа с плавающей запятой до четвертого знака. Чтобы получить более детальный вывод, необходимо использовать DoubleToStr, например:
Print("Value: ",DoubleToStr(var1,5));
Функция DoubleToStr самостоятельно произведет нормализацию до указанного количества знаков.