C++保留有效位與保留小數位

 若是想要保留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中。

第二種方法比較適合即算即用,快速簡便。

相關文章
相關標籤/搜索