Округление чисел в МТ4 через NormalizeDouble - страница 8

 
Dmitry Fedoseev:

Ну и неправильно.

Вычесть, нормализовать до двух знаков, а потом до одного.

 Ну так попробуйте :)

 
Event:

 Ну так попробуйте :)

А что пробовать? Итак понятно. Результат вычитания ненормализованный, значит будут сюрпризы иногда, если не нормализовать до двух знаков.
 
Event:

А какой нужен?

 нужно узнать длину строки? - вы ветки не попутали?

Код?

Если будет больше 2 строк как у меня, значит у вас сложнее. 

 
Vasyl Nosal:

Код?

Если будет больше 2 строк как у меня, значит у вас сложнее.

Вы невнимательно читаете посты.

Я привел код - в нем одна строка. 

 
Event:

Вы невнимательно читаете посты.

Я привел код - в нем одна строка. 

Прикольно. Так у себя в коде и буду писать 1.15 нормалайз:)))))))))))))))))))))))))))))))))))))))))))))))))))
 
Vasyl Nosal:

+++

Правда если число длиннее 15 знаков после запятой, надо его все равно как то обрезать иначе не работает правильно.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ushort  Characters_delete=15;
   for(int i=0;i<=Characters_delete;i++)
     {
      double v1=1.123456789012345;

      v1=DoubleCrop(v1,i,Characters_delete);

      Print("v1 = ",i," = ",DoubleToString(v1,Characters_delete-i));
     }
   Print("---");
  }
//+------------------------------------------------------------------+
//| Double Crop function                                             |
//+------------------------------------------------------------------+
double DoubleCrop(double value,int ii,ushort  Characters)
  {
   string data="",resoult="";
   data=DoubleToString(value,Characters);
   resoult=StringSubstr(data,0,StringLen(data)-ii);
   return StringToDouble(resoult);
  }
//+------------------------------------------------------------------+
 
Event:

 Ну так попробуйте :)

С нулем и с отрицательными числами неправильно. С положительными, на удивление, без сюрпризов правильно. 
 

Vasyl Nosal:

extern ushort Characters_delete = 1;

///////////////////////////////////////////
string data=DoubleToString(Bid,Digits);
string resoult=StringSubstr(data,0,StringLen(data)-Characters_delete);  

 

Хех. Это ложный путь. Совсем неправильные результаты.
 
Dmitry Fedoseev:
С нулем и с отрицательными числами неправильно. С положительными, на удивление, без сюрпризов правильно. 

К отрицательным надо прибавлять (если Normalize увеличивает по модулю при округлении).

А с нулем видимо ничего не делать.

Если применять к котиру -  вероятность его стать <= 0 мала... :)

 
Восемь страниц про округление. Вроде, раньше это проходили в четвертом классе :( 
Причина обращения: