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

value飘荡在范围-1.0e-141.0e-14"0.000""-0.000"之间s闪烁。 是否有一个干净的方法来抑制负号,它只会指示无关噪音,并在更远的位置保留十位小数?抑制 “减去零” 从COUT

(越少一般的情况下是cout << ...。)

what is the best way to avoid negative zero in output?地址肤浅的问题。它的答案是四舍五入到有效数字之前传递到< <,这是一个大量的计算,“如果所有数字均为零,只需将frickin减去”。

+0

使用['setw'](http://en.cppreference.com/w/cpp/io/manip/setw)(右对齐输出)或['showpos']可能会更好一些(http://en.cppreference.com/w/cpp/io/manip/showpos)(显示'+'或'-')。 – dyp

+0

是的,'showpos'闪烁+和 - 而不是空格和减号。闪烁少一个像素:-)。 –

+0

'return(s.str()==“-0.000”)有什么特别的错误吗?字符串(“0.000”):s.str();'?还是这意味着承认失败?在'cout'的情况下,你必须做'cout << fixmydouble(value);'。 –

回答

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.

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

+0

哇,我刚刚失去了我的downvote童贞:-)有没有这样的徽章? –