【问题标题】:cout prints inaccurate result and printf prints accurate resultcout 打印不准确的结果,而 printf 打印准确的结果
【发布时间】:2020-05-22 06:32:55
【问题描述】:

以下 C++ 代码:

    double x = 500000.6;
    printf("%f\n", x);
    cout << x << endl;

打印以下内容:

500000.600000
500001

为什么cout 没有打印正确的值 (500000.6)?

将以下行作为代码的开头使cout 打印出正确的结果:

cout.precision(7);

但是,将精度设置为 6(无论如何都是默认值)不会打印出预期的结果。

为什么会这样?我的小数点后只有 1 位,而不是 7 位!

【问题讨论】:

    标签: c++ printf double cout


    【解决方案1】:

    默认情况下,精度是有效位数的总数。不是小数点后的位数。 500000.6 有七位有效数字,500001 只有六位。

    试试这个

    cout << fixed << setprecision(1) << x << endl;
    

    用于固定格式时,精度为小数点后的位数。

    【讨论】:

    • 太棒了!有用。我只是有一个小问题,什么是“固定”?它不是一个函数,因为它后面没有括号。那么,它是什么? cout 用于打印,但cout &lt;&lt; fixed 只是更改 cout 行为而不打印任何内容。有什么解释吗?
    • 叫做操纵器,endl和setprecision也是操纵器。fixed其实是一个函数的名字。该函数作为函数指针传递给 operatoren.cppreference.com/w/cpp/io/manip
    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多