c++ - 我怎样才能得到 double 值?

标签 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.125,但 r=3.12 而不是 r=3.13

我怀疑这是因为传入的 d 实际上是 3.1249999.... 这就是我放入初始 cout 的原因,所以我可以看到传入的“true”值。 std::cout 在显示值之前对其进行舍入?我还能如何看到传入的“真实”值?

最佳答案

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

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

关于c++ - 我怎样才能得到 double 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33574266/

相关文章:

c++ - 仅使用 C 结构并保持 OOPy?

c++ - 当 const 未一致使用时,如何使编译器至少发出警告

c - strtod 返回 0

java - Java中的双十进制格式

java - 将 Java Double 格式化为 7 个字符

c++ - 如何在 C++ 中逐个元素地比较两个 vector 的相等性?

c# - P/Invoke 调用失败

c++ - 使用 Win32 线程模型时,MinGW-w64 是否支持开箱即用的 std::thread?

c++11 - 为什么标准库中的 std::chrono::duration 实例不按值传递?

C++函数装饰器