如何将控制台输出对齐到小数点而不是左对齐或右对齐

How to align the console output to decimal point instead of left or right

我正在尝试将 C++ 中的控制台输出对齐到小数点。我尝试了 setwprecision 选项和其他与 rightleft 对齐的标志。

但其中 none 的效果令人满意。

最接近的选择是使用 showpos 打印正数的 (+) 符号,但它会干扰其他格式,例如“TE_1_0”到“TE_+1_+0”。 =16=]

1.000000    -0.000000   0.000000
-0.000000   1.000000    0.000000
0.000000    0.000000    1.000000

最好将其对齐到小数点以将输出呈现给感兴趣的人。因此,我们将不胜感激任何帮助。

您可以使用 setwsetfillfixedsetprecesion 的组合来执行此操作,如下所示:

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

int main()
{
    std::vector<std::vector<double>> vec{{10.0233, 122.1, 1203.1},{100.03, 22.15, 3.01},{107.03, 152.1, 0.1},};
    for(std::vector<double> tempVec: vec)
    {
        for(double elem: tempVec)
        {
            std::cout << std::setw(8) << std::setfill(' ') << std::fixed << std::setprecision(3) << elem << "    ";
        }
        std::cout<< std::endl;
    }
    return 0;
}

上面的输出是:

  10.023     122.100    1203.100    
 100.030      22.150       3.010    
 107.030     152.100       0.100 

如果将上面的例子稍微修改如下:

std::cout << std::setw(12) << std::setfill(' ') << std::fixed << std::setprecision(6) << elem << "    ";

则输出变为:

   10.023300      122.100000     1203.100000    
  100.030000       22.150000        3.010000    
  107.030000      152.100000        0.100000 

setw用于设置输出的最大长度,在我给出的例子中是8和12。

setfill 用于用 char.

填充填充位置