2013-10-21 175 views
0

每当我尝试编译,我得到将int转换为float?

24【警告】从float

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

任何建议转换为int到我的什么做错了?

+0

'a'是一个int,'b * c'是一个浮点数。 – Adam

+0

您不需要将整数转换为浮点数,因为不会因为编译器自动完成转换而丢失精度。 –

回答

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

aint,而等式的右边是两个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); 
0

那么你刚刚发出警告,因为编译器正在改变浮点值的个数,从而截断结果。

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

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

基本上你没有做错什么。这只是一个警告,因为价值将被截断(也许你不期望)。告诉你真的想要得到一个int了浮动的编译器,你可以明确造型,像这样:

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

然后,它会不会发出警告了。