我怎样才能得到二重的精确值

How can I get the exact value of a double?

本文关键字:二重      更新时间:2023-10-16

我有一种情况,其中:

void foo( const double d )
{
    const double rounded_2_decimals = std::round(d*100.0) / 100.0;
    std::cout << "d=" << d << std::endl;
    std::cout << "r=" << rounded_2_decimals << std::endl;
}

打印时,使用d=3.125,但使用r=3.12而不是r=3.13

我怀疑这是因为传入的d实际上是3.1249999……这就是为什么我放入初始cout,这样我就可以看到传入的"true"值。std::cout在显示值之前会对值进行舍入吗?否则,我怎么能看到传递的"真实"值呢?

是的,std::cout会舍入值,但您可以设置更高的精度。首先包括iomanip报头。然后:

void foo( const double d )
{
    const double rounded_2_decimals = std::round(d*100.0) / 100.0;
    std::cout << "d=" << std::setprecision(9) <<  d << std::endl;
    std::cout << "r=" << std::setprecision(9) << rounded_2_decimals << std::endl;
}

此处的实时示例程序