Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Etete
0 / 0 / 1
Регистрация: 27.12.2010
Сообщений: 40
#1

Приведение типов - C++

02.12.2012, 22:29. Просмотров 365. Ответов 5
Метки нет (Все метки)

При вводе с клавиатуры s = 11 и a = 1.1, получаем 9.
Результат переменной d = 10, это правильно. В чём подвох?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    double s;
    double a;
    cin >> s >> a;
    int c = s/a;
    int d = 11/1.1;
 
    cout << c << endl;
    cout << d << endl;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 22:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приведение типов (C++):

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

Приведение типов - C++
Добрый вечер! Реализовываю явное и не явное приведение типов. Есть два класса, сепаративных, A и B. Реализацию явного преобразования...

Приведение типов. - C++
Столкнулся с задачей считывания данных из символьного массива с дальнейшим отбором из всего этого чисел и перезаписи их в массив типа...

Приведение типов - C++
Необходимо привязать адрес массива double по указателю к адресу структуры. Массив сам создан в другом приложении. Если использовать...

Приведение типов - C++
Есть ли какая-нибудь разница в следующих выражениях: float a = 123.4f и float a = (float)123.4

Приведение типов - C++
Как привести наследника ко второму родителю? class Parent1 { public: int a; int b; int c; }; class Parent2

5
Boshop
13 / 13 / 0
Регистрация: 25.09.2012
Сообщений: 122
02.12.2012, 22:43 #2
Скомпилировал твой код в обоих случаях 10. Может у тебя с компилятором что то не то?
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
02.12.2012, 22:45 #3
В VS2012 ошибка не воспроизводится
скорее всего, происходит следующее:
s/a выдает 9.999999...
а затем это число ошибочно переводится в 9, отбрасывая при этом дробную часть
0
Etete
0 / 0 / 1
Регистрация: 27.12.2010
Сообщений: 40
02.12.2012, 22:46  [ТС] #4
А чего он выводит 9.99999, раз тут нацело делится?
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
02.12.2012, 22:48 #5
Etete, double в памяти обычно хранится не точно, а с погрешностью Поэтому даже 11, это и не 11 вовсе, а, например, 11.0000001

Добавлено через 41 секунду
В любом случае, программа не должна возвращать 9 в этом примере
0
Etete
0 / 0 / 1
Регистрация: 27.12.2010
Сообщений: 40
02.12.2012, 22:52  [ТС] #6
int отсекает значит остальные девятки, т.к если у d тип double, при вычислении = 10.
0
02.12.2012, 22:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 22:52
Привет! Вот еще темы с ответами:

Приведение типов - C++
в GUI ни int str = static_convert&lt;int&gt;(Edit1-&gt;Text) ни int str = (int)Edit1-&gt;Text не приводит : E2034 Cannot convert...

Приведение типов. - C++
Доброго времени суток! В общем, есть класс Matrix(прямоугольные над полем вещ. чисел). Необходимо реализовать приведение типов Matrix...

Приведение типов - C++
Как компилятор заставить адекватней приводить типы? (VS2012) Например: int a=-1; unsigned int b=5; if(a&gt;b){...}//Условие...

приведение типов - C++
Объясните, пожалуйста, почему возникает такая ошибка: error C2666: 'operator *' : 4 overloads have similar conversions ? Из-за того,...


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

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

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