如何让返回类型作为此表达式的双精度返回: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;
}
答案 0 :(得分:1)
只需声明a
为double
而不是int
。
double a;
int b;
// ...
答案 1 :(得分:0)
您已将a
定义为int
,因此无法保留double
值。如果您将定义更改为double a;
,它应该可以正常工作。
答案 2 :(得分:0)
您的z
为double
,因此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常规算术转换
.......
否则,将对两个操作数执行整数提升。然后将以下规则应用于提升的操作数:
如果两个操作数具有相同的类型,则无需进一步转换。
否则,如果两个操作数都具有有符号整数类型或两者都具有无符号整数类型,则具有较小整数转换等级类型的操作数将转换为操作数的类型排名更高。
所以,在表达式中 -
2 * NUM + z;
NUM
属于const int
类型,与z
double
的类型相比,排名较低。根据规则,int
被提升为double
。 2个double类型操作数的结果将产生类型double
的结果。但是您正在将结果分配给int
类型,因此警告。将a
的类型更改为double应该可以正常工作。