1

我有一个这样的程序:

#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。问题可能出在哪里?

4

4 回答 4

7

这是因为i100都是整数,编译器会进行整数除法。

解决这个问题的最简单方法是改用double文字100.0

cout << (x = i/100.0) << endl;
于 2013-09-18T10:46:19.500 回答
2

你需要投要么i加倍100,例如:

cout << (x = (double)i/100) << endl;
cout << (x = static_cast<double>(i)/100) << endl;

否则,由于它们都是int,因此使用 s 执行除法int,然后才将结果转换为双精度。当然,在转换之前,浮点数之后你会失去一切。

于 2013-09-18T10:45:28.467 回答
2

更改100100.0将产生一个double值:

cout << (x = i/100.0) << endl;
//                ^^
于 2013-09-18T10:46:57.490 回答
1

只是因为=是一个序列运算符,而转换只是在单个序列内完成。

因此,您只需进行整数到整数的算术运算,无需转换。

所以整数结果将被转换为浮点结果,但那个时候浮点数已经被丢弃了。因此,您必须确保在右侧部分中=使用了一个浮点变量,该浮点变量和整数值之间的算术已完成并且转换已完成。

100.0您可以通过键入或来实现此目的1.0

于 2013-09-18T10:49:02.580 回答