2013-09-10 4 views
1

Как вы получите возвращаемый тип, возвращаемый как двойной для этого выражения: a = 2 * NUM + z;?Предупреждение при преобразовании в `int 'из` double'

Вот моя полная программа:

#include <iostream> 

using namespace std; 

int main() 
{ 
const int NUM = 10; 
const double x = 20.5; 

int a, b; 

double z; 

char grade; 

a = 25; 

cout <<"a = " <<a <<endl; 

cout <<" Enter two integers : "; 

cin >> a >> b; 

cout << endl; 

cout << " The numbers you entered are " 

    <<a <<" and " <<b <<endl; 

     z = x + 2 * a - b; 

     cout <<"z = " <<z <<endl; 

     grade = 'A'; 

     cout <<"Your grade is " <<grade <<endl; 

     a = 2 * NUM + z; 

     cout << "The value of a = " << a <<endl; 

     return 0; 

} 
+4

Вы должны принять один из нижеприведенных ответов, чтобы вопрос отображался как ответ вместо изменения названия темы. – greatwolf

ответ

1

Просто объявите a как double вместо int.

double a; 
int b; 
// ... 
+0

Спасибо за помощь. – Elsombrero1

0

Вы определили a как int так что нет никакого способа, он может содержать значение double. Если вы измените определение на double a;, оно должно работать нормально.

+0

Это был пример кода из учебника, который мы используем, и обзоры говорят, что это абсолютно ужасный lol. Полагаю, мне нужно будет справиться, спасибо за вашу помощь. – Elsombrero1

0

Ваш z является double так 2 * NUM + z также double, но присваивается значение a, которое является int. Я не совсем то, что вы пытаетесь сделать здесь; если вы пытаетесь сохранить значение 2 * NUM + z в a с усечением, то вам следует добавить отливку: a = static_cast<int>(2 * NUM + z); OTOH, если вы не хотите усечения, но хотите сохранить полное значение double, вам необходимо его сохранить в double переменная.

0

От стандарта, 6.3.1.8 обычные арифметические преобразования

.......

В противном случае, целые акции выполняются на обоих операндов. Затем к продвинутым операндам применяются следующие правила:

  1. Если оба операнда имеют один и тот же тип, то дальнейшее преобразование не требуется.

  2. В противном случае, если оба операнда имеет подписанных целые типов или оба имеют беззнаковые целые тип, операнда с типом меньшего ранга целочисленного преобразования преобразуется к типу операнда с большим рангом.

Таким образом, в выражении -

2 * NUM + z; 

NUM является тип const int, который имеет более низкого ранга по сравнению с типом z, который double. Согласно правилу, int - double. Результат двух операндов двойного типа даст результат типа double. Но вы назначаете результат на int, следовательно, предупреждение. Изменение типа a на двойной должен работать нормально.

Смежные вопросы