std::ostream 的浮点格式

新手上路,请多包涵

如何使用 std::cout 执行以下操作?

 double my_double = 42.0;
char str[12];
printf_s("%11.6lf", my_double); // Prints " 42.000000"

我正准备放弃并使用 sprintf_s。

更一般地说,我在哪里可以找到关于 std::ostream 格式的参考,它在一个地方列出所有内容,而不是在一个长教程中将它们全部展开?

编辑 2017 年 12 月 21 日 - 请参阅下面的答案。它使用了我在 2012 年问这个问题时不可用的功能。

原文由 Jive Dadson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 770
2 个回答
std::cout << std::fixed << std::setw(11) << std::setprecision(6) << my_double;

您需要添加

#include <iomanip>

你需要 流操纵器

你可以用你想要的任何字符“填充”空的地方。像这样:

 std::cout << std::fixed << std::setw(11) << std::setprecision(6)
          << std::setfill('0') << my_double;

原文由 Kiril Kirov 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 C++20 中,您将能够做到

double my_double = 42.0;
char str[12];
std::format_to_n(str, sizeof(str), "{:11.6}", my_double);

或者

std::string s = std::format("{:11.6}", my_double);

同时,您可以使用提供 format_to_n 实现 的 {fmt} 库

免责声明:我是 {fmt} 和 C++20 std::format 的作者。

原文由 vitaut 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏