double value;
std::ostringstream s;
s << std::fixed << std::setprecision(3) << value;
当value
在-1.0e-14
到1.0e-14
范围内徘徊时,s
在"0.000"
和"-0.000"
之间闪烁。
是否有一种干净的方法来抑制减号,这只表示无关紧要的十分小数点后的噪音?
(不太常见的情况是cout << ...
。)
what is the best way to avoid negative zero in output?解决了肤浅的问题。它的答案是,在传递给&lt;&lt;之前向右舍入正确的有效数字,与“如果所有数字都为零,只需删除frickin减去”相比,计算量很大。
答案 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。
此外,如果它以减号开头,则跳过该字符。