Разве х=1/3 и х=1; х/3 не одно и то же?

 

Получаются разные результаты.

void OnStart()
  {
//---
   double y=1; y/=3;
   double wtf=1/3;
   Print(DoubleToStr(y,8),"=",DoubleToStr(wtf,8));
  }

Результат:

2017.05.07 22:30:58.882    WTF EURUSD,M1: 0.33333333=0.00000000

Что за...?

 

Держите себя в руках, капитан.

Всё очень просто:

void OnStart()
  {
//---
   double y=1.0; y/=3.0;
   double wtf=1.0/3.0; 
   Print(DoubleToStr(y,8),"=",DoubleToStr(wtf,8));
  }

Возьмите за правило - если число не целое, значит ставим ".0"

 
Спасибо, а если переменная, сделать еще одну, но типа double?
 
Gobo:
Спасибо, а если переменная, сделать еще одну, но типа double?

Вопрос не понятен. Лучше, для начала, ознакомьтесь: Приведение типов
 
Gobo:
Спасибо, а если переменная, сделать еще одну, но типа double?

Да можно сколько угодно делать переменных - просто надо доходчиво объяснять компилятору, что вы имете ввиду.

Вы написали:

double y=1; y /= 3;

Что означает:

Объявляем переменную-дубль y

Объявляем переменную целого типа со значением 1

Присваиваем переменной y значение объявленной переменной с приведением типов.

Делим переменную y на целую константу 3.

В результате совершенно правильно получаем значение 0,33333....

Теперь второй случай:

double wtf = 1/3

Что означает:

Объявляем переменную-дубыль wtf.

Объявляем переменную целого типа со значением 1.

Объявляем переменную целого типа со значением 3.

Делим вторую переменную на третью, получаем переменную целого типа со значением 0

Присваиваем переменной wtf значение суммы, преобразовывая ее к типу double.

Результат будет равен именно нулю.

Разумеется, он не может быть равен 0,3333

И, Vladimir Karputov  вам тоже верно сказал - изучите приведение типов.

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