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