若是想要保留n位小數算法
根據C++官網上的解釋,該函數沒有指定的返回類型,而且該函數用於設定輸出操做上的小數精確位。函數
而後返回值中解釋:未指定返回值,這個函數僅用於數據流修改操做上。 學習
說了這麼多,我想要表達的意思就是當咱們須要將精確後的小數保存(將a精確後保存賦值給b)起來的話,使用setprecision函數就不行了。orm
不要緊,別急,我這裏有解決方法:blog
1.使用stringstream類ci
在這裏咱們使用第一種方式,能夠看到第一種用法解釋是設置流的格式標誌(format flag)爲參數 fmtfl 的形式字符串
然而參數fmtflags fmtfl又是什麼呢?繼續跟進去能夠看到get
這裏就能夠看到fixed的意思是將小數設置爲定點表示法string
而後後面的ss.precision(3)就是保留3位io
放在一塊兒的意思就是小數點後保留3位有效位。
至於ss.str(),能夠看到官網解釋以下,獲得字符串流中保存的內容,注意返回位std::string類型:
2.手動計算,結束floor函數
這個算法的思想就是先將該數乘以1000,就獲得了小數點後三位,而後+0.5是什麼意思呢?
你們想想哈,a*1000=1123.456789對不對,咱們通常保留有效位都是須要四捨五入的,
在a*1000以後+0.5不就自動實現了四捨五入了嗎?而後在使用地板函數進行取整,再除1000不就完美實現了嗎?
總結:第一種方法適用於一次性處理大批數據,好比說若是你想要將不少數據一次寫入txt中。
第二種方法比較適合即算即用,快速簡便。