每当我尝试编译时,我都会
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";
有关我做错的建议吗?
答案 0 :(得分:2)
a = static_cast<float>(b) * c;
a
是int
,等式的右边是两个floats
的乘法,这将导致中间float
值,然后隐式地转换为int
,导致您看到的警告。
此外:
answer += (x + y + m);
answer
是int
类型,x
和y
也是m
,float
是float
,再次导致中间结果右边是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