小编Shi*_*ngh的帖子

为什么 C++ 将超过 6 位小数的双精度数递增到下一个十进制数,而不实际更改该值?

为什么会发生这种行为?第六位之后的小数在 double 中递增到下一位,但在转换为 int 时不递增。

转换为 int 时会引起问题,因为尽管打印 3,d1 在转换为整数时仍然转换为 2 而不是 3

    double d1 = 2.999999; //6 digits after decimal
    double d2 = 2.777777;
    
    double d3 = 2.77777;  //5 digits after decimal
    double d4 = 2.99999;  
    
    cout<<d1<<endl;       //gives 3
    cout<<(int)d1<<endl;  //still gives 2 not 3
    cout<<d2<<endl;       //gives 2.777778
    
    cout<<d3<<endl;       //gives 2.77777 as expected
    cout<<d4<<endl;       //gives 2.99999 as expected
Run Code Online (Sandbox Code Playgroud)

我假设它必须与编译器或精度有关,但我不确定这种意外行为。请帮忙

c++ floating-point types

3
推荐指数
1
解决办法
270
查看次数

标签 统计

c++ ×1

floating-point ×1

types ×1