Разве х=1/3 и х=1; х/3 не одно и то же?
Держите себя в руках, капитан.
Всё очень просто:
void OnStart() { //--- double y=1.0; y/=3.0; double wtf=1.0/3.0; Print(DoubleToStr(y,8),"=",DoubleToStr(wtf,8)); }
Возьмите за правило - если число не целое, значит ставим ".0"
Вопрос не понятен. Лучше, для начала, ознакомьтесь: Приведение типов
Да можно сколько угодно делать переменных - просто надо доходчиво объяснять компилятору, что вы имете ввиду.
Вы написали:
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 вам тоже верно сказал - изучите приведение типов.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Получаются разные результаты.
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
Что за...?