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


保留有效位:

這是大多數博客上的方法:

 

 如果想要保留n位小數

 

 根據C++官網上的解釋,該函數沒有指定的返回類型,並且該函數用於設定輸出操作上的小數精確位。

 

然后返回值中解釋:未指定返回值,這個函數僅用於數據流修改操作上。 

說了這么多,我想要表達的意思就是當我們需要將精確后的小數保存(將a精確后保存賦值給b)起來的話,使用setprecision函數就不行了。

沒關系,別急,我這里有解決方法:

1.使用stringstream類

 

 

 

 

 在這里我們使用第一種方式,可以看到第一種用法解釋是設置流的格式標志(format flag)為參數 fmtfl 的形式

然而參數fmtflags fmtfl又是什么呢?繼續跟進去可以看到

 

 

 這里就可以看到fixed的意思是將小數設置為定點表示法

然后后面的ss.precision(3)就是保留3位

放在一起的意思就是小數點后保留3位有效位。

至於ss.str(),可以看到官網解釋如下,得到字符串流中保存的內容,注意返回位std::string類型:

 

 

 

2.手動計算,結束floor函數

這個方法是同事(一位算法大佬)教我的。

 

這個算法的思想就是先將該數乘以1000,就得到了小數點后三位,然后+0.5是什么意思呢?

大家想一想哈,a*1000=1123.456789對不對,我們一般保留有效位都是需要四舍五入的,

在a*1000之后+0.5不就自動實現了四舍五入了嗎?然后在使用地板函數進行取整,再除1000不就完美實現了嗎?

 

總結:第一種方法適用於一次性處理大批數據,比如說如果你想要將很多數據一次寫入txt中。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM