c++ - 在C++中输出具有常数个字符的浮点值

标签 c++ formatting floating-point

我在执行我认为在 C++ 中应该是相当简单的任务时遇到了麻烦。我正在尝试输出要写入日志文件的浮点值。日志文件为数字输出指定了 7 个字符,但我发现在不同大小、符号和精度(例如:1、- 0.60937、0.60937、0.009371、-0.009371)。我有一种有点黑的方法来做到这一点:

int desiredPrecision = 6;
if (runningAvg < 0)
  desiredPrecision--;
if (std::abs((long) runningAvg) < 1)
  desiredPrecision--;
else
  theFile << std::showpoint;

theFile.precision (desiredPrecision);

theFile.fill('0');
theFile.setf(std::ios_base::left, std::ios_base::adjustfield);
theFile.width(7);
theFile << runningAvg << std::endl;

但这种方式对我来说似乎非常 hacky。它适用于以下数字: -0.60937(输出:-0.6094)

-1.7 (-1.7000)

-1 (-1.0000)

0.6937 (0.60937)

0.00937 (0.00937)

但它打破了 0.009371 (0.009371)

-0.009371 (-0.009371)

现在,我可以添加另一个级别的 if-else 语句来处理小数量级的数字,但这似乎只是增加了 hackiness 级别,而不是一种干净的方法。我玩过 fprintf,但它似乎更关心精度的严格数学定义,而在这个应用程序中,我更关心始终将字段宽度限制为 7 个字符。 (我也可以相信这些数字永远不会大到溢出 6 个字符加一个符号)

我在这里遗漏了什么明显的东西吗?任何人有任何提示可以减少黑客攻击的方式来实现这一目标吗?

最佳答案

不知道如何用 iostream 的东西做到这一点,但我认为你正在寻找的 ?printf 格式字符串是其中之一:

  • %.4f 用于负数,%07.5f 用于正数。
  • %+.4f(正数将有前导+)
  • % .4f(正数会有前导空格)

关于c++ - 在C++中输出具有常数个字符的浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503430/

相关文章:

java - Formatter VS DateFormat 不一致

google-apps-script - 用于根据值将电子表格的列中的单元格设置为粗体的脚本。 (条件格式?)

android - 如何在 Android Studio 中格式化评论?

c++ - 如何使用标准库函数将字符串 "0xAp-2"转换为 2.5 的两倍

c++ - 向用户显示异常调试信息

c++ - 从 vb 调用非托管 c++ dll 中的函数

php - 打印 PHP float 小数点后 2 位数字?

performance - 在 Haskell 中运行跨平台、确定性模拟的最有效方法是什么?

c++ - 指向垃圾节点的指针

C++ 使用 CRTP 检测 friend 类的私有(private)成员