Кто-то явно считать не умеет... :( - страница 3

 
Сергей Таболин:

Нет. Я не понимаю почему функция выдающая результат как дабл, не переводит передаваемые ей аргументы (или прописанные) в тот же дабл? Почему у неё внутри 54/100 == 0 ?

Вспомните, как учили таблицу умножения. Вместо понимания многие вещи надо просто учить наизусть.
 
Сергей Таболин:

Почему у неё внутри 54/100 == 0 ?

Сереж, тут получается, что преобразование происходит ещё до функции MathRound. Поскольку 54 это int, то результат деления тоже становится int. А уж затем всё это дело попадает в функцию.

Если было бы так: 54.0/100, то был бы duoble.

 
zvezdocheet:
Вспомните, как учили таблицу умножения. Вместо понимания многие вещи надо просто учить наизусть.

Таблица тут не при чём. 

Почему функция

double mF(double a, int b)
{
   return(a/b)
}

при вызове с аргументами 54, 100 - выдаёт ответ 0 ??? Это утрировано, но по начальному вопросу именно так и получается...

 
Aleksei Stepanenko:

Сереж, тут получается, что преобразование происходит ещё до функции MathRound. Поскольку 54 это int, то результат деления тоже становится int. А уж затем всё это дело попадает в функцию.

Если было бы так, то был бы duoble: 54.0/100.

Я об этом и говорю! Функция, принимающая даблы и возвращающая дабл, на мой взгляд, должна сама переводить все числа в этот формат. 

Возможно, я слишком многого хочу... )))

 

Так и есть она принимает double, но только там на входе 0.0

54/100=0, поскольку преобразует результат в int.

Затем 0 преобразуется в 0.0 при попадании в функцию.


Короче говоря, всё зависит от типа 54, он здесь музыку заказывает :)

 
Aleksei Stepanenko:

Так и есть она принимает double, но только там на входе 0.0

54/100=0, поскольку преобразует результат в int.

Затем 0 преобразует в 0.0 при попадании в функцию.

Алексей, я это понял ))) Просто хотелось бы, чтобы компилятор автоматом переписал 54/100 на 54.0/100.0.... Исключительно из соображения, что все аргументы передаваемые в функцию обязаны быть в требуемом формате... Ну, хотелось бы так...


П.С. Кстати, кабы было написано 54/100.0, то результат был бы уже не int )))
 
Кстати да, прикольно было бы, чтобы машинка была более интеллектуальной. А то иногда раздражает.
 
либо я чего то не понимаю из вашей дискуссии, либо .. одно из трёх
Файлы:
aaa.mq4  3 kb
aaa.mq5  3 kb
 
Спартак Угланов:
либо я чего то не понимаю из вашей дискуссии, либо .. одно из трёх

очень большая просьба - если предлагаете краткий код к обсуждению, то вставляйте его прямо к текст сообщения. А не как вложенный файл.

не принуждайте людей что-то скачать, запустить mt, только чтобы посмотреть и потом удалить

 
Сергей Таболин:

Таблица тут не при чём. 

Почему функция

double mF(double a, int b)
{
   return(a/b)   Ну тут точка с запятой нужна, иначе компилер 2 ошибки дает
}

при вызове с аргументами 54, 100 - выдаёт ответ 0 ??? Это утрировано, но по начальному вопросу именно так и получается...

Прежде чем утверждать, проверяйте. Эта штука дала 0.54. Если аргументы разного типа, преобразуется к старшему