gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:27:15 25 4
gpt4 key购买 nike

我在执行我认为在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com