Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 0
Регистрация: 03.06.2019
Сообщений: 62
1

Перевести long в double

21.08.2019, 20:45. Показов 1834. Ответов 8
Метки нет (Все метки)

Суть в чем, есть некая ф-я Todouble(), принимающая 2 параметра типа long, и возвращающая переменную типа double - результат деления первого аргумента ф-и на второй. Вот ее реализация:
C++
1
2
3
4
double Todouble(long a, long b) {
    double c = a / b;
    return c;
}
И пусть в main() такая реализация:
C++
1
2
3
4
5
int main()
{
       double b = Todouble(2, 4);
       cout << b;
}
Выводиться лишь 0. В чем дело? Почему не работает?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.08.2019, 20:45
Ответы с готовыми решениями:

Чем различаются long long и long double?
long long или long double

Почему перестает работать программа при замене double на long double?
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете,...

long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей
Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это...

Количество знаков после запятой double, Long double
Есть число большой точности A. A=-1.768573656315270993281 742915329544712934120053405549882...

8
Продавец времени
5779 / 3188 / 732
Регистрация: 12.03.2015
Сообщений: 15,100
21.08.2019, 20:49 2
Лучший ответ Сообщение было отмечено NuMeRiC_ как решение

Решение

C++
1
2
3
4
double Todouble(long a, long b) 
{
   return (double)a / b;
}
Результат деления двух целых - целое. Идиотская реализация оператора "/" в Си.
1
2 / 2 / 0
Регистрация: 03.06.2019
Сообщений: 62
21.08.2019, 21:27  [ТС] 3
Чувак, ты не представляешь, насколько мне помог)
Спасибо, что дал обяснение. Прикол в том, что я использовал привидение типов но не так:
C++
1
return (double)a / b;
А такое:
C++
1
return double(a / b);
Теперь-то дошло, что тупой компилятор сначало делит a на b, и лишь потом конвертирует результат, как double.
И да, цитата - правда всей жЫзни=^)
0
DrOffset
21.08.2019, 21:30
  #4

Не по теме:

Цитата Сообщение от NuMeRiC_ Посмотреть сообщение
что тупой компилятор
А вы хотели, чтобы компилятор за вас программу писал? :) Может он тогда и зарплату получать за вас будет? :)
А вообще он сделал ровно то, что вы попросили, согласно правилам языка, и тупизна компилятора тут не при чем.

0
Продавец времени
5779 / 3188 / 732
Регистрация: 12.03.2015
Сообщений: 15,100
21.08.2019, 21:38 5
Цитата Сообщение от NuMeRiC_ Посмотреть сообщение
Теперь-то дошло, что тупой компилятор сначало делит a на b
Это тебе не паскаль. Сколько было мозгов сломано об такие неочевидные особенности - ооооо..... В таких местах какой-нить warning был бы не лишним. Я не имею в виду приоритет операторов, а именно аналогичное их написание.
0
15108 / 8108 / 1958
Регистрация: 30.01.2014
Сообщений: 13,774
21.08.2019, 21:55 6
Цитата Сообщение от Verevkin Посмотреть сообщение
а именно аналогичное их написание
Но тут нет никакого "аналогичного" написания.
Он взял все выражение в скобки, применил function-style cast к нему. Естественно каститься будет результат выражения, который уже целое. Это логично, и в паскале именно это работало бы точно так же.
0
Продавец времени
5779 / 3188 / 732
Регистрация: 12.03.2015
Сообщений: 15,100
21.08.2019, 22:26 7
Цитата Сообщение от DrOffset Посмотреть сообщение
Но тут нет никакого "аналогичного" написания.
Я про аналогично написание двух разных операторов - одним символом "/".
В паскале это один оператор, а не два.
0
15108 / 8108 / 1958
Регистрация: 30.01.2014
Сообщений: 13,774
21.08.2019, 22:35 8
Verevkin, я бы понял тебя верно, если бы не твоя цитата текста ТС, которая уже совсем про другое. Про якобы тупость компилятор, т.е. И "тупость" эта не связана с наличием двух операторов, скрывающихся за одним символом.
0
Продавец времени
5779 / 3188 / 732
Регистрация: 12.03.2015
Сообщений: 15,100
21.08.2019, 22:38 9
Цитата Сообщение от DrOffset Посмотреть сообщение
я бы понял тебя верно, если бы не...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2019, 22:38

Вывести long double число без перевода в double
Надо вывести long double число без перевода в double. Пишу: printf(&quot;%Lf&quot;,S); и выводится неверно....

Как char[] перевести в битовую маску long long(64 бита) и наоборот?
Как char перевести в битовую маску long long(64 бита) и наоборот?

Перевести long long unsigned int в массив char
Подскажите, пожалуйста, как превратить число типа long long unsigned int в массив символов? Каждый...

Перевести большой массив char в long long
Здравствуйте. Есть массив char c 3145360828. Надо его в int перевести. Пробовал с atoi, вместо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.