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童貞:-)有沒有這樣的徽章? –