在 C++ 中把浮点数取整到两位小数

Jinku Hu 2023年10月12日
  1. 在 C++ 中使用 printf 函数格式说明符将浮点数四舍五入为 2 个小数
  2. 在 C++ 中使用 fprintf 函数格式说明符将浮点数舍入到 2 位小数
  3. 在 C++ 中使用 std::setprecisionstd::fixed 将浮点数舍入为 2 个小数
在 C++ 中把浮点数取整到两位小数

本文将介绍几种在 C++ 中如何将浮点数四舍五入到两位小数的方法。

在 C++ 中使用 printf 函数格式说明符将浮点数四舍五入为 2 个小数

浮点数具有特殊的二进制表示形式,这意味着机器无法精确表示实数。因此,在对浮点数进行运算并对其进行计算时,通常要借助于舍入函数。但是,在这种情况下,我们只需要输出数字的小数部分。

第一种解决方案是利用 printf 函数将格式化的文本输出到 stdout 流。注意,浮点数数字的常规格式说明符-%f 应修改为%.2f。后一种表示法确保从该数字仅打印 2 个小数,并且同时根据通用数学规则进行舍入。请注意,其他数据类型的格式说明符也可以使用类似的符号。

#include <iostream>
#include <vector>

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

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    printf("%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

输出:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

在 C++ 中使用 fprintf 函数格式说明符将浮点数舍入到 2 位小数

fprintf 是另一个可以用来做输出格式化的函数,就像 printf 调用一样,此外,它可以写入任何可以作为第一个参数传递的 FILE*流对象。在下面的示例中,我们演示了打印到 stderr 流,这是 stdout 的无缓冲版本,用于错误报告和日志记录。

#include <iostream>
#include <vector>

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

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    fprintf(stderr, "%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

输出:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

在 C++ 中使用 std::setprecisionstd::fixed 将浮点数舍入为 2 个小数

或者,可以将 I/O 机械手库中的 std::setprecision 函数与 std::fixed 一起使用。后者用于修改浮点输入/输出操作的默认格式。如果我们将其与 std::setprecision 一起使用,则结果是实数的固定精度,并且可以通过传递给 std::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> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    cout << setprecision(2) << fixed << item << "; ";
  }

  return EXIT_SUCCESS;
}

输出:

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

LinkedIn Facebook

相关文章 - C++ Float