从cout中抑制“减零”

时间:2014-01-26 22:56:18

标签: c++ negative-number floating-point-conversion ostringstream

double value;
std::ostringstream s;
s << std::fixed << std::setprecision(3) << value;

value-1.0e-141.0e-14范围内徘徊时,s"0.000""-0.000"之间闪烁。 是否有一种干净的方法来抑制减号,这只表示无关紧要的十分小数点后的噪音?

(不太常见的情况是cout << ...。)

what is the best way to avoid negative zero in output?解决了肤浅的问题。它的答案是,在传递给&lt;&lt;之前向右舍入正确的有效数字,与“如果所有数字都为零,只需删除frickin减去”相比,计算量很大。

1 个答案:

答案 0 :(得分:0)

即使<iomanip>中没有任何内容可以调整实际流,我们至少也不能依赖于传递给setprecision()的值,如下所示:

const std::string& t = s.str();
return t.find_first_of("123456789") == t.npos && t[0] == '-' ?
  t.substr(1) : t;

如果未找到1..9的数字,则所有数字必须为0。

此外,如果它以减号开头,则跳过该字符。