如何在 C++ 中打印指定小数点的数字

Jinku Hu 2021年3月21日 2020年10月15日
如何在 C++ 中打印指定小数点的数字

本文将介绍如何在 C++ 中打印指定小数点的数字。

使用 std::fixedstd::setprecision 方法指定精度

本方法使用 <iomanip> 头文件中定义的标准库中的所谓 I/O 操作器(查看完整列表)。这些函数可以修改流数据,主要用于 I/O 格式化操作。在第一个例子中,我们只使用 fixed 方法,它修改了默认的格式,使浮点数用定点符号写入。注意,结果总是有一个预定义的小数点后 6 位精度。

#include <iostream>
#include <iomanip>
#include <vector>

using std::cout; using std::endl;
using std::vector; using std::fixed;

int main() {
    vector<double> d_vec = {123.231, 2.2343, 0.324, 10.222424,
                            6.3491092019, 110.12329403024,
                            92.001112, 0.000000124};

    for (auto &d : d_vec) {
        cout << fixed << d << endl;
    }
    return EXIT_SUCCESS;
}

输出:

123.231000
2.234300
0.324000
10.222424
6.349109
110.123294
92.001112
0.000000

另外,我们也可以将小数点固定在逗号之后,同时指定精度值。在下一个例子中,fixed 函数与 setprecision 函数一起调用,后者本身使用 int 值作为参数。

#include <iostream>
#include <iomanip>
#include <vector>

using std::cout; using std::endl;
using std::vector; using std::fixed;
using std::setprecision;

int main() {
    vector<double> d_vec = {123.231, 2.2343, 0.324, 10.222424,
                            6.3491092019, 110.12329403024,
                            92.001112, 0.000000124};

    for (auto &d : d_vec) {
        cout << fixed
            << setprecision(3) << d << endl;
    }
    return EXIT_SUCCESS;
}

输出:

123.231
2.234
0.324
10.222
6.349
110.123
92.001
0.000

前面的代码示例解决了最初的问题,但输出的结果似乎很混杂,而且几乎没有可读的格式。我们可以使用 std::setwstd::setfill 函数来显示给定向量中的浮点数,并将其对齐到同一个逗号位置。为了达到这个目的,我们应该调用 setw 函数来告诉 cout 每个输出的最大长度(本例中我们选择 8)。接下来,调用 setfill 函数,指定一个 char 来填充填充位。最后,我们添加之前使用的方法(fixedsetprecision),并输出到控制台。

#include <iostream>
#include <iomanip>
#include <vector>

using std::cout; using std::endl;
using std::vector; using std::fixed;
using std::setfill; using std::setw;
using std::setprecision;

int main() {
    vector<double> d_vec = {123.231, 2.2343, 0.324, 10.222424,
                            6.3491092019, 110.12329403024,
                            92.001112, 0.000000124};

    for (auto &d : d_vec) {
        cout << setw(8) << setfill(' ') << fixed
            << setprecision(3) << d << endl;
    }
    return EXIT_SUCCESS;
}

输出:

123.231
  2.234
  0.324
 10.222
  6.349
110.123
 92.001
  0.000
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - C++ Float