将int转换为float?

时间:2013-10-21 05:25:02

标签: c++

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

24 [警告]从int

转换为float

83 [警告]从int

转换为float
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";

有关我做错的建议吗?

3 个答案:

答案 0 :(得分:2)

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

aint,等式的右边是两个floats的乘法,这将导致中间float值,然后隐式地转换为int,导致您看到的警告。

此外:

answer += (x + y + m);

answerint类型,xy也是mfloatfloat,再次导致中间结果右边是float

这些转换会导致截断int结果的小数值。您可以通过显式转换为a = static_cast<int>(static_cast<float>(b) * c); answer += static_cast<int>(x + y + m);

来消除警告
{{1}}

答案 1 :(得分:1)

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

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

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

然后它不再警告你了。

答案 2 :(得分:0)

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

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