我有一个这样的程序:
#include <iostream>
using namespace std;
int main ()
{
double x;
for (int i = 1; i < 100; i++)
{
cout << (x = i/100) << endl;
}
return 0;
}
在运行它时,我只得到:
0
0
0
[...]
我在Cygwin-g ++和MinGW-g ++上测试了这个;版本4.7.2。 哪里可能是问题?
答案 0 :(得分:7)
这是因为i
和100
都是整数,编译器会进行整数除法。
解决此问题的最简单方法是使用double
文字100.0
代替:
cout << (x = i/100.0) << endl;
答案 1 :(得分:2)
您需要将i
或100
强制转换为双倍,例如:
cout << (x = (double)i/100) << endl;
cout << (x = static_cast<double>(i)/100) << endl;
否则,因为它们都是int
,所以使用int
执行除法,然后才将结果转换为double。当然,在转换之前,你会在浮点之后丢失所有内容。
答案 2 :(得分:2)
将100
更改为100.0
会产生double
值:
cout << (x = i/100.0) << endl;
// ^^
答案 3 :(得分:1)
这只是因为=
是序列运算符,转换只是在一个序列中完成。
所以你只需要进行整数到整数运算,不需要转换。
因此整数结果将被转换为浮点结果,但那时浮点已经被丢弃。所以你必须确保=
的右边部分是一个浮点变量,它在浮点数和整数值之间完成,并完成转换。
您可以输入100.0
或1.0
。