浮点数仅打印整数部分

时间:2013-09-18 10:44:42

标签: c++ floating-point

我有一个这样的程序:

#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 个答案:

答案 0 :(得分:7)

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

解决此问题的最简单方法是使用double文字100.0代替:

cout << (x = i/100.0) << endl;

答案 1 :(得分:2)

您需要将i100强制转换为双倍,例如:

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.01.0

来实现此目的