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

 
Алексей Тарабанов:

да и неправильна Ваша, уж извините...  

Почему? 

void OnStart()
  {
   for(int i=1;i<=9;i++)
     {
      double v1=0.1*i;

      Print("v1 = ",v1," = ",DoubleToString(MathCeil(v1),2));
     }
  }

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.1 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.2 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.3 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.4 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.5 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.6 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.7 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.8 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.9 = 1.00

Ваш пример:

0.1+0.5=0.6 = 1 

0.2+0.5=0.7 = 1  

0.3+0.5=0.8 = 1  

0.4+0.5=0.9 = 1  

0.5+0.5=1.0 = 1  

0.6+0.5=1.1 = 1  

0.7+0.5=1.2 = 1   

0.8+0.5=1.3 = 1   

0.9+0.5=1.4 = 1   

 
lilita bogachkova:

Почему? 

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.1 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.2 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.3 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.4 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.5 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.6 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.7 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.8 = 1.00

0 22:49:08.463 ! tests GBPUSDbc,H1: v1 = 0.9 = 1.00

Ваш пример:

0.1+0.5=0.6 = 1 

0.2+0.5=0.7 = 1  

0.3+0.5=0.8 = 1  

0.4+0.5=0.9 = 1  

0.5+0.5=1.0 = 1  

0.6+0.5=1.1 = 1  

0.7+0.5=1.2 = 1   

0.8+0.5=1.3 = 1   

0.9+0.5=1.4 = 1   

Потому, что утверждение: "int A = double B + 0.5" решается: int A = (int)MathCeil(double B); неверно. 
 
Алексей Тарабанов:
Потому, что утверждение: "int A = double B + 0.5" решается: int A = (int)MathCeil(double B); неверно. 
Ну и как же оно решаться?
 
lilita bogachkova:
Ну и как же оно решаться?
Правильно, т.е. как я сказал. Сначала к дробному числу добавляется 0.5, а после от результата отсекается дробная часть и остается результат округления до целого. 
 
Dmitry Fedoseev:

А если так?

Тогда 5
 
Алексей Тарабанов:
Правильно, т.е. как я сказал. Сначала к дробному числу добавляется 0.5, а после от результата отсекается дробная часть и остается результат округления до целого. 
Код?
 
lilita bogachkova:
Ну и как же оно решаться?
Он не может объяснить. Не тревожь его. гыыы
 
Vasyl Nosal:
Код?
int A = double B + 0.5 
 
Алексей Тарабанов:
Правильно, т.е. как я сказал. Сначала к дробному числу добавляется 0.5, а после от результата отсекается дробная часть и остается результат округления до целого. 
Ну тогда надо писать в сервисдеск , что они там такую лишнюю функцию MathCeil() придумали :)
 
Vasyl Nosal:
Он не может объяснить. Не тревожь его. гыыы
Вась, не мешай общаться, if you please