2015-12-14 75 views
7

我有一些舊的C代碼我試圖複製C++中的行爲。它使用printf修飾符:「%06.02f」。匹配printf格式與iomanip

我天真地以爲iomanip就那麼能幹,做的:

cout << setfill('0') << setw(6) << setprecision(2) 

當我嘗試輸出的測試號123.456,printf產量:

123.46

但是cout收益率:

1.2 + E02

有什麼我可以做iomanip複製這一點,或者我必須回去使用printf

[Live Example]

+0

試着看一下boost :: format()。它支持iostream的printf()類型語法,並且是類型安全的。 –

+0

@JonTrauntvein雖然我很欣賞這個提示(特別是因爲大量的提升內容最終會讓它進入標準),但我不會在任何可能的情況下添加提示。這裏似乎沒有包括它。 –

回答

2

的三個C格式說明圖,以C++輸入輸出流對應格式設置:

  • %f - >std::ios_base::fixed(固定點記數法)典型地使用out << std::fixed設置。
  • %e - >std::ios_base::scientific(科學記數法)典型地使用out << std::scientific設置。
  • %g - >默認設定中,典型地使用out.setf(std::fmtflags(), std::ios_base::floatfield)或C++ 11和後out << std::defaultfloat設置。假設使用固定數量的數字,默認格式化會試圖產生其他格式的「最好」。

精度,寬度和填充字符與您已經聲明的方式相匹配。

4

嘗試std::fixed

std::cout << std::fixed; 

設置floatfield格式標誌爲STR流爲固定。

floatfield設置爲fixed,浮點值使用定點表示法寫成:該值表示與由精度字段precision)中所指定的小數部分一樣多的位數,並用無指數部分。

+0

是的,那就明白了,在這方面固定的含義是什麼? –

+1

@JonathanMee它使用固定的符號。我更新了這篇文章。 – AlexD