Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - деление в c++

Ответить
Настройки темы
C/C++ - деление в c++

Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


Double x = 5 / 2;
cout << x;

выводит не 2.5, а 2

что делать, в чем дело, как исправить? помогите плиз

Отправлено: 22:09, 04-10-2016

 

Аватара для shisik

Ветеран


Сообщения: 3307
Благодарности: 599

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
double x = 5.0 / 2;
Дело в том, что компилятор воспринимает 5 как целое число int, делит его на другое целое число и получается результат - тоже целое число. И только потом он приводится к типу double:

Код: Выделить весь код
double x = double(5 / 2);
Как-то так получается. Для деления с сохранением дробной части нужно 5 привести к типу double до операции деления:

Код: Выделить весь код
double x = double(5) / 2;
Или же просто определить в виде дробного числа, как я показал в самом начале.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:19, 04-10-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


спасибо

а допустим
int x;
double a;
cin >> x; вводится 5
a = x/2;
cout << a;


выведет тоже 2, а надо 2.5! как быть?

все!!! понял!!!

a = x*1.0/2;

Последний раз редактировалось sheepang, 05-10-2016 в 14:09. Причина: понял


Отправлено: 13:55, 05-10-2016 | #3


Аватара для shisik

Ветеран


Сообщения: 3307
Благодарности: 599

Профиль | Отправить PM | Цитировать


Цитата sheepang:
выведет тоже 2 »
Ну конечно! Вы же объявили x целым числом int:

Код: Выделить весь код
int x;
Объявите его double и всё:

Код: Выделить весь код
double x;
double a;
cin >> x; //вводится 5
a = x/2;
cout << a;
Цитата sheepang:
a = x*1.0/2; »
Это будет работать, но это называется «костыль». Тогда уж правильнее явно привести к double:

Код: Выделить весь код
a = double(x) / 2;
Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:45, 05-10-2016 | #4


Новый участник


Сообщения: 20
Благодарности: 0

Профиль | Отправить PM | Цитировать


спасиб

Отправлено: 17:55, 05-10-2016 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата shisik:
Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале. »
Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае.

Отправлено: 18:23, 05-10-2016 | #6


Аватара для shisik

Ветеран


Сообщения: 3307
Благодарности: 599

Профиль | Отправить PM | Цитировать


Цитата Iska:
Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае. »
Само собой. Если нет возможности сразу объявить как double, можно использовать явное приведение типов:

Код: Выделить весь код
a = double(x) / 2;

Отправлено: 18:34, 05-10-2016 | #7


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата shisik:
можно использовать явное приведение типов »
Код: Выделить весь код
a = double(x) / 2;
Пора уже на static_cast<double>(x) / 2 переходить.

Отправлено: 17:07, 07-10-2016 | #8


Аватара для shisik

Ветеран


Сообщения: 3307
Благодарности: 599

Профиль | Отправить PM | Цитировать


Цитата User001:
Пора уже на static_cast<double>(x) / 2 переходить. »
Разве это не просто «синтаксическая соль»?

Отправлено: 21:58, 07-10-2016 | #9


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата shisik:
Разве это не просто «синтаксическая соль»? »
Не, в C++ при C-style cast работает интересней (можно посмотреть сюда). А практическая ценность - можно отловить часть проблем на этапе компиляции и само приведение на глаза попадается лучше (еще пример).

Отправлено: 12:53, 08-10-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - деление в c++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - Деление omelon Microsoft Office (Word, Excel, Outlook и т.д.) 6 13-06-2012 15:38
Загрузка - Деление дисков Fives Microsoft Windows 2000/XP 6 22-01-2011 01:10
Assm - Деление ManHack Программирование и базы данных 6 13-04-2010 23:21
Деление трафика Teo Сетевые технологии 1 13-12-2003 08:13
Деление диска Flip Microsoft Windows 95/98/Me (архив) 5 19-10-2002 20:09




 
Переход