Скачать MetaTrader 5

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

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

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

( 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,")");  
}   
Ihor Herasko
9307
Ihor Herasko  
MathCeil выполняет округление к ближайшему большему числу. Число 1.12342 - не нормализовано, что означает не абсолютное равенство тому числу, которые вы ожидаете. Нормализуйте значение перед MathCeil или приведите к типу int. Тогда будет работать так, как нужно.
wladimir
1162
wladimir  

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

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

val=MathCeil(112342.00000)=112343.00000

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


Victor Nikolaev
Модератор
14666
Victor Nikolaev  
wlad:

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

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

val=MathCeil(112342.00000)=112343.00000

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



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

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

wladimir
1162
wladimir  

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

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

o_o
Модератор
23861
o_o  
wlad:

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

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

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

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