我怎样才能得到双精确值?

时间:2015-11-06 19:29:24

标签: c++ c++11 double rounding gcc5.2

我的情况是:

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.125r=3.12代替r=3.13

我怀疑这是因为传入的d实际上是3.1249999 ....这就是我输入初始cout的原因,所以我可以看到传入的“true”值。{{1在显示它们之前舍入值?我怎么能看到传递的“真实”价值?

1 个答案:

答案 0 :(得分:2)

是的,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;
}

实例示例程序here