将 int 转换为浮点数

Converting int to float?

本文关键字:浮点数 转换 int      更新时间:2023-10-16

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

24 [警告] 从float转换为int

83 [警告] 从float转换为int

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";

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

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

a是一个int,方程的右边是两个floats的乘法,这将产生一个中间float值,然后隐式地转换为int,导致你看到的警告。

也:

answer += (x + y + m);

answerint类型,xy也是如此,但mfloat,再次导致右侧的中间结果是float

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

a = static_cast<int>(static_cast<float>(b) * c);
answer += static_cast<int>(x + y + m);

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

int a;
float f = 3.2;
a = f; // a is 3, a trunctated 3.2

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

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

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

然后它不会再警告你了。