1

你如何让返回类型作为这个表达式的双精度返回: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

4 回答 4

1

只需声明a为 adouble而不是int.

double a; 
int b;
// ...
于 2013-09-10T02:18:32.743 回答
0

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

于 2013-09-10T02:17:52.453 回答
0

z是一个double所以2 * NUM + z也是一个double,但你分配的值a是一个int。我不是你在这里想要做的。如果您尝试使用截断存储2 * NUM + zin的值a,那么您应该添加一个强制转换:a = static_cast<int>(2 * NUM + z);OTOH,如果您不想要截断但想要存储完整double值,那么您需要将其存储在一个double变量中。

于 2013-09-10T02:21:18.260 回答
0

从标准,6.3.1.8 通常的算术转换

…………

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

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

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

所以,在表达式中 -

2 * NUM + z;

NUM是 的 类型,与 的 类型相比,其const int等级较低。根据规则,晋升为。2 个双精度类型操作数的结果将产生 type 的结果。但是您正在将结果分配给一个类型,因此会发出警告。将类型更改为 double 应该可以正常工作。zdoubleintdoubledoubleinta

于 2013-09-10T02:25:35.973 回答