2012-10-31 50 views
0

我有以下代碼:爲什麼setw和width不適用於ostringstream?

template<typename _Tp> 
std::string string_from_number(_Tp number, int precision = 5) 
{ 
    std::ostringstream oss; 
    oss.width(precision+1); 
    oss<<number; 
    return oss.str(); 
} 

但是字符串的長度不是5的預期,但保持默認。
替換oss.widthoss<<std::setw也不起作用。 我在做什麼錯?

編輯:

的問題,如果數字是double類型的清晰顯示說0.123456789。

+2

默認8?爲什麼是默認的8?你能展示一個完整的代碼示例,你的期望輸出和你的實際輸出嗎?因爲對我來說,這正是我所期望的。當使用默認值5時,它返回一個長度爲6的字符串。 [Demo](http://liveworkspace.org/code/61e41e6cdc67bbdbd87261c0bedd9210) –

+0

您是否在談論浮點數中顯示的位數?你需要的函數是['precision'](http://en.cppreference.com/w/cpp/io/ios_base/precision),而不是'width'。 –

+0

你是對的,我認爲默認值可能是9.感謝測試,即使使用你的代碼,如果我使用雙精度作爲輸入,並說精度爲2,它堅持默認寬度... –

回答

3

若要控制顯示在浮點數中的位數,您需要的功能是precision而不是width。如果您想確保以固定標記(而不是科學標記)顯示數字,請查看格式標記fixed,與setf成員函數一起使用。

相關問題