static_cast的一个问题
#include<iostream>
int main()
{
using std::cout;
using std::cin;
cout << static_cast<float> (5/8);
cin.get();
return 0;
}
上面这段程序输出:0
#include<iostream>
int main()
{
using std::cout;
using std::cin;
cout << (float)5/8;
cin.get();
return 0;
}
上面这段程序输出:0.625
怎么static_cast转换不来啊
[解决办法]
static_cast<float>使用前已经把 (5/8)当成整型了
[解决办法]
(float)5/8,是先5为float,So 整个表达式为float
[解决办法]
cout << (static_cast<float> (5)/ static_cast<float>(8));
//这样才对吧! 你的代码 是已经是 int 型了 之后再float的,所以没有阿!
[解决办法]
cout << static_cast<float> (5)/8;
也是输出 0.625。
两个计算方式不一致,结果当然不同
一个先计算除法,后转换,一个先转换,后计算除法,结果相同是巧合,不同是正常结果。
[解决办法]
5/8 输出就是0,所以转为float还是0.整数相除
[解决办法]
static_cast<float> (5/8) ;// 相当于 (float)(5/8)
(float)5/8 ; //相当于 ((float)5)/8
[解决办法]
5/8 == 0
[解决办法]
cout << static_cast<float> (5)/8;