从'double'转换为`int'时发出警告

时间:2013-09-10 02:13:28

标签: c++ int

如何让返回类型作为此表达式的双精度返回:a = 2 * NUM + z;

这是我的完整计划:

#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 个答案:

答案 0 :(得分:1)

只需声明adouble而不是int

double a; 
int b;
// ...

答案 1 :(得分:0)

您已将a定义为int,因此无法保留double值。如果您将定义更改为double a;,它应该可以正常工作。

答案 2 :(得分:0)

您的zdouble,因此2 * NUM + z也是double,但您已将该值指定为a int 。我真的不是你想要做的;如果您试图将2 * NUM + z的{​​{1}}值存储在a中,那么您应该添加一个强制转换:a = static_cast<int>(2 * NUM + z); OTOH,如果您不想截断但想要存储完整double值,然后您需要将其存储在double变量中。

答案 3 :(得分:0)

从标准,6.3.1.8常规算术转换

.......

否则,将对两个操作数执行整数提升。然后将以下规则应用于提升的操作数:

  1. 如果两个操作数具有相同的类型,则无需进一步转换。

  2. 否则,如果两个操作数都具有有符号整数类型或两者都具有无符号整数类型,则具有较小整数转换等级类型的操作数将转换为操作数的类型排名更高

  3. 所以,在表达式中 -

    2 * NUM + z;
    

    NUM属于const int类型,与z double的类型相比,排名较低。根据规则,int被提升为double。 2个double类型操作数的结果将产生类型double的结果。但是您正在将结果分配给int类型,因此警告。将a的类型更改为double应该可以正常工作。