C ++ - 为什么我的cout代码显示小数不一致?

时间:2014-02-20 03:19:18

标签: c++ cout decimal-point

我正在处理一个需要通过cout在一行上打印数组的应用程序,并显示2个小数位。目前,我的代码打印前两个带有2位小数的项目,然后切换为1。

以下是代码:

cout << "  Inches ";
    cout << showpoint << setprecision(2) << right;
    for (int i = 0; i < 12; i++)
    {
        cout << setw(5) << precipitation[i];
    }
    cout << endl;

这是输出:

Inches 0.72 0.89 2.0 3.0 4.8 4.2 2.8 3.8 2.7 2.1 1.6 1.0

有人可以告诉我为什么这种变化是精确发生的,我可以做些什么来解决它?

由于

3 个答案:

答案 0 :(得分:5)

您需要使用“固定”模式。在默认浮点模式下,precision()设置要显示的有效数字的数量。在“固定”模式下,它设置小数点后的位数。一个很好的例子:

#include <iostream>
using namespace std;
int main(int argc, char **argv) {
    float pi = 3.14;
    cout.precision(2);
    cout << pi << endl;
    cout << fixed << pi << endl;
}

给出输出:

3.1
3.14

HTH。

答案 1 :(得分:1)

如果您只是添加cout&lt;&lt;除了showpoint和setprecision之外,在输出语句之前修复,您将获得所有输出的一致格式。

见下文:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    double precipitation[12] = { .72, .89, 2, 3, 4.8, 4.2, 2.8, 3.8, 2.7, 2.1, 1.6, 1 };
    cout << "  Inches ";
    cout << showpoint << fixed << setprecision(2) << right;
    for (int i = 0; i < 12; i++)
    {
        cout << setw(5) << precipitation[i];
    }
    cout << endl;

    return 0;
}

现在,输出将如下:

Inches  0.72 0.89 2.00 3.00 4.80 4.20 2.80 3.80 2.70 2.10 1.60 1.00

答案 2 :(得分:0)

我也遇到了这个问题。你需要使用'fixed'来做到这一点。

请参阅此链接: C++ setprecision(2) printing one decimal?