2012-02-21 67 views
1

這是related topic限制浮點ostream打印到一定長度?

我正在尋找稍微不同的東西,我正在打印出一個4x4浮點矩陣。事實上,我使用this prettyprint method來做到這一點,這將阻止我使用printf格式,這讓我更加熟悉。

我可以設置ios_base::width()來設置一個最小寬度來填充零和一個,但0.6666667喜歡擰緊對齊。我想我可以設置precision,但它隻影響有效數字的數量,而不影響數值產生的字符總數。我似乎無法在ostream上使用unsetf來設置'默認記號'...即使我可以這樣做,我懷疑減號會使對齊無法繼續。

是否有解決方法?

+0

如果您限制自己(例如)爲4個字符並且有人想要使用(例如)55432(.123456),您打算做什麼?可能會失去精確性,這會在小數點後面購買空間,但以前不會。也許你可以制定出你需要的最廣泛的方案,然後把其他人放到那個位置? – BoBTFish 2012-02-21 15:59:53

+0

理想情況下,我只想打印出最左邊的n個字符:n = 4:0.004或243.2或-222。如果我的價值大於或小於可以用這種方式表達,那麼我不需要知道確切的價值是什麼。似乎我可能需要做一些自定義的字符串處理來獲得我想要的確切行爲......我可以讓'setf(std :: ios_base :: fixed)'工作,這比以前更好,但我確實有減號問題,就像你說的那樣,它不會計算在小數點之前出現的數字。我是否假設我沒有限制寬度的機制?但它可以用'printf' ... – 2012-02-21 16:03:07

+0

我現在正在看''std :: setprecision'從''。不,看起來除了更方便地調用'precision'之外別無他法。我也似乎錯了'printf'也能做到這一點。它不允許我截斷!所以減號和前面的其他數字一樣,我必須自己處理。有人請給出一個解決方案(除了簡單的'sprintf' hackery)或者驗證沒有stdlib解決方案,因爲我現在懷疑。 – 2012-02-21 16:07:06

回答

1

我的臨時解決方案是width(7)precision(4)。它給我4位數字後的小數點和3是空格放置減號,一個數字,和小數點。我必須檢查和修改寬度以便容納(某些)大於99.9999或小於-9.9999的值以保持對齊。這樣做的好處是567890123不會被打印爲5678901,它所要做的就是拋棄對齊(很多,它將被打印爲567890123.0000)。