- -
деление в c++
(
http://forum.oszone.net/showthread.php?t=319450)
деление в c++
Double x = 5 / 2;
cout << x;
выводит не 2.5, а 2
что делать, в чем дело, как исправить? помогите плиз
|
Дело в том, что компилятор воспринимает 5 как целое число int, делит его на другое целое число и получается результат - тоже целое число. И только потом он приводится к типу double:
Код:
double x = double(5 / 2);
Как-то так получается. Для деления с сохранением дробной части нужно 5 привести к типу double до операции деления:
Код:
double x = double(5) / 2;
Или же просто определить в виде дробного числа, как я показал в самом начале.
|
спасибо
а допустим
int x;
double a;
cin >> x; вводится 5
a = x/2;
cout << a;
выведет тоже 2, а надо 2.5! как быть?
все!!! понял!!!
a = x*1.0/2;
|
Ну конечно! Вы же объявили x целым числом int:
Объявите его double и всё:
Код:
double x;
double a;
cin >> x; //вводится 5
a = x/2;
cout << a;
Это будет работать, но это называется «костыль». Тогда уж правильнее явно привести к double:
Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале.
|
Цитата:
Цитата shisik
Хотя в данном случае правильнее всего обявить x переменной типа double, как я сказал в самом начале. »
|
Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае.
|
Цитата:
Цитата Iska
Ну, может оно по смыслу должно быть как раз-таки integer. Не здесь, так в другом случае. »
|
Само собой. Если нет возможности сразу объявить как double, можно использовать явное приведение типов:
|
Цитата:
Цитата shisik
можно использовать явное приведение типов »
|
Пора уже на static_cast<double>(x) / 2 переходить.
|
Цитата:
Цитата User001
Пора уже на static_cast<double>(x) / 2 переходить. »
|
Разве это не просто «синтаксическая соль»?
|
Цитата:
Цитата shisik
Разве это не просто «синтаксическая соль»? »
|
Не, в C++ при C-style cast работает интересней (можно посмотреть сюда). А практическая ценность - можно отловить часть проблем на этапе компиляции и само приведение на глаза попадается лучше (еще пример).
|
Цитата:
Цитата User001
А практическая ценность - можно отловить часть проблем на этапе компиляции »
|
Ну приведение int → double, имхо, проблем создать не может. По крайней мере, в подобных случаях.
Цитата:
Цитата User001
и само приведение на глаза попадается лучше »
|
Это и значит «синтаксическая соль».
|
User001, образно говоря, человек пока учится ходить, так что рассуждения о том, какой звездолёт водить лучше — ему рановаты.
|
"не в тему"
"Синтаксическая соль" и "синтаксический сахар", это получается разные понятия, да?
Сахар слышал, Соль впервые.
Что у них еще в запасе? :)
|
Цитата:
Цитата lxa85
Что у них еще в запасе? »
|
Перец и манка :).
|
Цитата:
Цитата lxa85
"Синтаксическая соль" и "синтаксический сахар", это получается разные понятия, да?
Сахар слышал, Соль впервые. »
|
Да, это разные вещи. «Сахар» упрощает синтаксис, делая его более наглядным. Как пример иможно привести оператор array[n] вместо *(array + n).
«Соль» наоборот усложняет синтаксис, делая его громоздким и неудобным. Это нужно для того, чтоб потенциально опасные места сразу бросались в глаза. Вот как явное приведение типов через *_cast.
|
Время: 10:09.
© OSzone.net 2001-