首页  >  文章  >  后端开发  >  为什么 `std::cout. precision()` 不显示 C 中浮点数的尾随零?

为什么 `std::cout. precision()` 不显示 C 中浮点数的尾随零?

Barbara Streisand
Barbara Streisand原创
2024-11-10 11:41:03715浏览

Why doesn't `std::cout.precision()` display trailing zeros in floating-point numbers in C  ?

正确使用 std::cout. precision() 显示尾随零

在 C 中处理浮点数时, std::cout. precision() 方法对于控制显示的小数位数至关重要。但是,在某些情况下,用户会遇到意外结果,例如缺少尾随零。

考虑以下代码:

int main() {
  int a = 5;
  int b = 10;
  std::cout.precision(4);
  std::cout << (float)a / (float)b << "\n";
  return 0;
}

此代码尝试打印两个整数相除的结果(5 和 10),精确到小数点后 4 位。然而,输出是“0.5”而不是预期的“0.5000”。

这种行为的原因在于数字“a”和“b”最初存储为整数。当我们执行除法时,结果默认也是一个整数。为了正确显示浮点数,我们需要显式地将它们转换为浮点数,如以下行所示:

std::cout << (float)a / (float)b << "\n";

但是,即使在转换为浮点数之后,仍然缺少尾随零。这就是 std::fixed 操纵器发挥作用的地方。为了确保显示尾随零,我们必须将 std::fixed 操纵器传递给 std::cout。该操纵器对浮点值进行舍入并以定点表示法显示它。

更正后的代码是:

int main() {
  int a = 5;
  int b = 10;
  std::cout << std::fixed;
  std::cout.precision(4);
  std::cout << (float)a / (float)b << "\n";
  return 0;
}

包含 std::fixed 后,输出现在正确显示“0.5000”,遵循指定的 4 位小数精度。

以上是为什么 `std::cout. precision()` 不显示 C 中浮点数的尾随零?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn