【发布时间】:2012-03-19 04:38:21
【问题描述】:
我在做我认为应该是 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 个字符加上一个符号)
我在这里遗漏了一些明显的东西吗?任何人有任何技巧来实现这一目标吗?
【问题讨论】:
-
你期望 -99999 的输出是什么?
标签: c++ formatting floating-point