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/

相关文章:

C++ float 到 stringstream 的字符串转换失败

c++ - 为什么这个 "optimization"会减慢我的程序?

c++ - 未定义对 '_WSAStartup@8' 的引用。如何将库与 NetBeans 链接起来?

c++ - 粒子系统 : particle generation

c++ - 我应该使用基类还是子类来访问基类中定义的枚举值/常量?

c++ - 将大整数按双倍缩放

formatting - 使用 GDB 调试 Rust 程序时,如何使用格式打印?

NetBeans 大括号自动关闭

javascript - jPlayer "duration"在 iO 上计算为 1,440 分钟(对于所有 mp3)

c++ - 如何从输入 C++ 中分别读取整数和分数