MathCeil(): косяк или косяк?

 

как то странно работает, при преобразовании вылетает тройка

( what a fuck? )

16:07:54 ttt EURUSD,H1: val*=MathPow(10,digits)=112342.00000  (112342)
16:07:54 ttt EURUSD,H1: val=MathCeil(val)=112343.00000  (112343)

int start()
 {
   int digits = 5;
   double val = 1.12342;
   val*=MathPow(10,digits);  Print("val*=MathPow(10,digits)=",DoubleToStr(val,5),"  (",val,")");
   val=MathCeil(val);        Print("val=MathCeil(val)=",      DoubleToStr(val,5),"  (",val,")");  
}   
 
MathCeil выполняет округление к ближайшему большему числу. Число 1.12342 - не нормализовано, что означает не абсолютное равенство тому числу, которые вы ожидаете. Нормализуйте значение перед MathCeil или приведите к типу int. Тогда будет работать так, как нужно.
 

не совсем правельно, число которое используется это  112342.00000

то есть формула выглядет так

val=MathCeil(112342.00000)=112343.00000

и зачем нормализовать, функция для того и заточена, чтобы лишние знаки после запятой отбрасывать


 
wlad:

не совсем правельно, число которое используется это  112342.00000

то есть формула выглядет так

val=MathCeil(112342.00000)=112343.00000

и зачем нормализовать, функция для того и заточена, чтобы лишние знаки после запятой отбрасывать



А Вы уверены что ваше число равно 112341.999999999 а не 112342.000000001

Результат будет разный. В одном случае 112342, в другом 112343

 

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

спасибо за разъяснения обоим

 
wlad:

проблемы с даблами когда только нули после запятой

утопичная мысль.

такого не бывает.

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