如何在 C++ 中使用 setprecision

Jinku Hu 2023年10月12日
  1. 使用 setprecision() 方法为浮点数设置自定义精度
  2. 使用 setprecision()std::fixed() 为浮点数设置自定义精度
  3. 使用 setprecision()std::fixed() 将浮点数对齐到小数点
如何在 C++ 中使用 setprecision

本文将演示关于如何在 C++ 中使用 setprecision 方法的多种方法。

使用 setprecision() 方法为浮点数设置自定义精度

setprecision() 是输入/输出操纵器库 <iomanip> 的一部分,可以用来修改浮点数的默认精度。setprecision() 通常用于带 I/O 流的表达式中。

下面的例子显示了如何为 cout 输出流对象设置浮点数精度。注意,setprecision() 适用于整数(整数部分和分数部分),并且当数字的大小大于指定的精度时会采用科学计数法。

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

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

int main() {
  vector<double> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << setprecision(3) << i << " | ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

输出:

123 | 2.23 | 0.324 | 0.012 | 26.9 | 1.1e+04 | 92 | 2.34e-07 |

使用 setprecision()std::fixed() 为浮点数设置自定义精度

另外,我们还可以使用 setprecision()fixed() 流操作器联合打印小数点后相同位数的浮点数。fixed() 方法将数字的小数部分设置为固定长度,默认为 6 位。在下面的代码示例中,我们输出到 cout 流,并在将数字插入到输出中之前调用两个操作器。

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

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

int main() {
  vector<double> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << fixed << setprecision(3) << i << " | ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

输出:

123.231 | 2.234 | 0.324 | 0.012 | 26.949 | 11013.000 | 92.001 | 0.000 |

使用 setprecision()std::fixed() 将浮点数对齐到小数点

最后,我们可以结合 setwrightsetfillfixedsetprecision 操作器来输出向小数点对齐的浮点数。setw 方法以传递的字符数为参数指定输出流宽度。setfill 方法设置一个字符,将未使用的空格填满,right 方法告诉 cout 填充操作适用的一侧。

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

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

int main() {
  vector<double> d_vec = {123.231,       2.2343, 0.324,     0.012,
                          26.9491092019, 11013,  92.001112, 0.000000234};

  for (auto &i : d_vec) {
    cout << std::setw(10) << std::right << std::setfill(' ') << fixed
         << setprecision(4) << i << endl;
  }
  cout << endl;

  return EXIT_SUCCESS;
}

输出:

  123.2310
    2.2343
    0.3240
    0.0120
   26.9491
11013.0000
   92.0011
    0.0000
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C++ Float