关于C++中double和int之间转换的一个奇怪结果

sto*_*ang 1 c c++ type-conversion

我的问题:

尝试找出以下C++代码段的结果:

#include <iostream>

int main(int argc, char* argv[])
{
    double a = 5.1;
    int b = a * 100;
    std::cout << b << std::endl;

    double c = 6.1;
    int d = c * 100;
    std::cout << d << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在Windows上,我使用VS2008 SP1编译并运行上面的代码并获取:

509
610
Run Code Online (Sandbox Code Playgroud)

在Linux上,我使用g ++编译并运行相同的代码并获取:

509
609
Run Code Online (Sandbox Code Playgroud)

代码有什么问题?

对不起,我试图找出问题的标题,因此我可以搜索一下.但是,我不能说出这个问题,所以我直接在这里提出.

任何建议表示赞赏.

Ker*_* SB 5

double不是一个确切的类型,你可以通过应用看到std::numeric_limitstypetrait:

#include <limits>

static_assert(std::numeric_limits<double>::is_exact == false);
Run Code Online (Sandbox Code Playgroud)

因此涉及双打的计算只是近似的,你所观察到的并没有错.

您的代码没有问题.