Правила приведения типов или представление действительных чисел - как понять? - страница 2

 
tara:

А округлять можно как угодно :)

Вроде, говорили, что в пятерке это дело исправлено...


а в 574 всё как всегда
 
Я туда не ходил пока.
 
tara:

А округлять можно как угодно :)

Вроде, говорили, что в пятерке это дело исправлено...


Так это баг MQL4 ?
 
Фича :)
 
jeronimo:

1 вариант.

int start()
{
int delta;

delta=(1.0548-1.0541)/Point;


Comment(delta);
return(0);

}

Результат:delta = 6.

По правилам -

  • если в выражении содержатся операнды разных типов, то тип выражения преобразовывается в тип, имеющий более высокий приоритет; типы int, bool, color и datetime имеют одинаковый приоритет, тип double - более высокий приоритет, тип string - самый высокий приоритет;
  • если тип выражения справа от знака операции присвоения не совпадает с типом переменной слева от знака операции присвоения, то значение выражения приводится к типу переменной слева от знака операции присвоения; это называется приведением к целевому типу;

Должно быть delta = 7.


Из чего следует, что "должно быть delta = 7"?

Приведение не означает округление. При приведении вещественного к целому просто-напросто отбрасывается дробная часть.

Если в результате выражения вы получили вещественное 6.9999999999999999, то после приведения к целому вы получите 6, а не 7

 
stringo:

Из чего следует, что "должно быть delta = 7"?

Приведение не означает округление. При приведении вещественного к целому просто-напросто отбрасывается дробная часть.

Если в результате выражения вы получили вещественное 6.9999999999999999, то после приведения к целому вы получите 6, а не 7



Правила приведения знаю, но при расчетах delta=(1.0548-1.0541)/Point=(1.0548-1.0541)/0.0001=0.0007/0.0001=7.

Как я могу получить в выражении вот это 6.9999999999999999 ?

 
jeronimo:

Правила приведения знаю, но при расчетах delta=(1.0548-1.0541)/Point=(1.0548-1.0541)/0.0001=0.0007/0.0001=7.

Как я могу получить в выражении вот это 6.9999999999999999 ?

Нормализуйте до 16 знаков после точки.
 
jeronimo:

Правила приведения знаю, но при расчетах delta=(1.0548-1.0541)/Point=(1.0548-1.0541)/0.0001=0.0007/0.0001=7.

Как я могу получить в выражении вот это 6.9999999999999999 ?

int start()
  {
//----
  double x=(1.0548-1.0541)/Point;
  Alert("_________",DoubleToStr((x,8));
 int delta=(1.0548-1.0541)/Point;
 Alert(delta);
   return(0);
  }
Результат x=70.0, delta=69 (у меня пятизнак, поэтому 70 а не 7)
 
borilunad:
Нормализуйте до 16 знаков после точки.
Получилось 7 и что?
 
Sepulca:
Результат x=70.0, delta=69 (у меня пятизнак, поэтому 70 а не 7)


Да если delta double а не int то 7. но это я в первом посте писал.

Вопрос в том почему не работает первый вариант из первого поста:

1 вариант.

int start()
{
int delta;

delta=(1.0548-1.0541)/Point;


Comment(delta);
return(0);

}

Результат:delta = 6.