C++ float vs double cout setprecision oddities(newbie)

Han*_*nda 8 c++ math precision floating-accuracy

任何人都可以解释为什么当我使用setprecision()时,这两个相同值的变量可以输出不同的值?

#include <iostream>
#include <iomanip>
int main()
{
    float a=98.765;
    double b = 98.765;
    //std::cout<<std::setprecision(2)<<a<<std::endl;
    std::cout<<std::fixed;
    std::cout<<std::setprecision(2)<<a<<std::endl;
    std::cout<<std::setprecision(2)<<b<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

a的输出为98.76,而b的输出为98.77.

pax*_*blo 9

这些变量没有相同的值.当你鞋拔子字面double98.765进入浮法,它必须做一个最适合的,而丢失了一些精度.

如果将精度更改为50,则可以非常轻松地看到这一点,您还会看到即使双精度也不能完全代表该值:

98.76499938964843750000000000000000000000000000000000
98.76500000000000056843418860808014869689941406250000
Run Code Online (Sandbox Code Playgroud)

然而,重要的是前者float变量将向下舍入,后者double将向上舍入.

另请参阅IEEE754在线转换器.