0

每当我尝试编译时,我都会得到

24 [警告] 转换为intfromfloat

83 [警告] 转换为intfloat

int a , b = 8;
float c = 5.2;
float d = 8E3;
a = static_cast<float>(b) * c; // 24
cout << a << "\n";
cout << d << "\n";


int x, y, answer;
x = 7;
y = 9;
answer = 5;
answer *= (x + y);
cout << answer << "\n";


answer *= x + y;
cout << answer << "\n";


float m = 33.97;
answer += (x + y + m); // 83
cout << answer << "\n";

关于我做错了什么的任何建议?

4

3 回答 3

2
a = static_cast<float>(b) * c;

a是 a int,等式的右侧是 2 的乘积floats,这将产生一个中间float值,然后将其隐式转换为 a int,从而导致您看到的警告。

还:

answer += (x + y + m);

answer是一个int类型, and 也是xy但是misfloat再次导致右侧的中间结果是 a float

这些转换将导致float结果的小数值被截断。您可以通过显式转换为来摆脱警告int

a = static_cast<int>(static_cast<float>(b) * c);
answer += static_cast<int>(x + y + m);
于 2013-10-21T05:29:54.860 回答
1

好吧,您只是收到警告,因为编译器正在将浮点值更改为整数,从而截断了结果。

int a;
float f = 3.2;
a = f; // a is 3, a trunctated 3.2
于 2013-10-21T05:30:14.353 回答
1

您的问题似乎是关于从 float 到 int 的转换,而不是从 int 到 float。

基本上你没有做错任何事。这只是一个警告,因为该值将被截断(也许你不希望这样)。要告诉编译器你真的想从浮点数中得到一个 int,你可以显式地进行强制转换,如下所示:

a = static_cast<int>(static_cast<float>(b) * c);

然后它不会再警告你了。

于 2013-10-21T05:30:23.830 回答