您好,登錄后才能下訂單哦!
這篇“怎么控制Python浮點數輸出位數”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“怎么控制Python浮點數輸出位數”文章吧。
在python的輸出結果中,尤其是浮點數的輸出,當我們需要寫入文本文件時,最好是采用統一的輸出格式,這樣也能夠增強結果的可讀性。而對于浮點數輸出位數的控制,可以通過{:.4f}、%.4f來指定打印或者輸出時的字符串占據空間,也可以通過round函數來對輸出前的結果進行轉化。而如果是取有效數字,需要用到{:.4},這幾種方法沒有優劣,只有看不同的場景,選取不同的精度控制方案。
在Python的一些長效任務中,不可避免的需要向文本文件、二進制文件或者數據庫中寫入一些數據,或者是在屏幕上輸出一些文本,此時如何控制輸出數據的長度是需要我們注意的一個問題。比如對于一個二進制文件,如果輸出的浮點數長度一直在發生變化,則寫入到文件之后,讀取的人按照比特位進行讀取就會讀到一堆錯誤的數據。因此,我們需要控制輸出位數,尤其是浮點數要格外小心。
一般情況下,我們可以通過round
來設置輸出浮點數的有效數字,其原理是對于一個給定的浮點數直接取前n位的有效數字,后續的數字四舍五入。而%.4f
和{:.4f}
這兩種格式化,是在輸出時取小數點后4位打印,跟先取有效數字再打印是不一樣的,后面會提到。先看下這幾個方式的輸出異同點:
In [1]: pi_10=31.415926 In [2]: print (round(pi_10,4)) 31.4159 In [3]: print ('%.4f' % pi_10) 31.4159 In [4]: print ('{:.4f}'.format(pi_10)) 31.4159
上面的例子是小數點前和小數點后都有多位數字,另外類似的可以看下小數點前只有0的數字的輸出結果:
In [5]: pi_10=0.31415926
In [6]: print (round(pi_10,4))
0.3142
In [7]: print ('{:.4f}'.format(pi_10))
0.3142
In [8]: print ('%.4f' % pi_10)
0.3142
在上面的兩個案例中,我們發現三者的輸出結果都是一樣的。但是前面提到了先取有效數字再輸出,跟先輸出再取有效數字的區別,可以通過下面的一個案例體現出來:
In [9]: pi_10=3.1415926E-08 In [10]: print (round(pi_10,4)) 0.0 In [11]: print ('{:.4f}'.format(pi_10)) 0.0000 In [12]: print ('%.4f' % pi_10) 0.0000
這里的輸入是一個小數點后有很多0的浮點數,但是這里用的是科學計數法,也就是\(3.1415926*10^{-8}\),此時我們用這三種輸出方式,得到的結果全都是0,而且第一種方案更是直接小數點后都沒滿4位。這是因為在用round取有效數字時,發現小數點后的數字太多,把當前的浮點數直接當成了0.0
而不是0.0000
,而后面兩個方案的過程更像是在打印出來這個數字之后,再把超過有效位數的數字去掉,因此會保留小數點后的4個0。但是,即使如此,得到的結果也不是我們所想要的結果。因為這個數字雖然很小,但是可能只是由于單位問題,并不代表這個數字產生的影響就是0,因此直接用這種取小數點后有效數字的方法可能會出問題。
這里我們要介紹的取有效數字的方法,不再是去小數點后的有效數字,而是整體的有效數字。方法也很簡單,就是把上一個章節中的{:.4f}
改成{:.4}
,同樣的可以通過這么幾個案例來理解控制有效數字的結果:
In [13]: pi_10=3.1415926E-08
In [14]: print ('{:.4}'.format(pi_10))
3.142e-08
In [15]: pi_10=0.31415926
In [16]: print ('{:.4}'.format(pi_10))
0.3142
In [17]: pi_10=31.415926
In [18]: print ('{:.4}'.format(pi_10))
31.42
我們發現,輸出的結果會根據輸入的格式改變而改變,如果輸入的小數位0過多,輸出結果會被自動轉換成科學計數法。而不僅僅是針對浮點數,{:.4}
還可以作用在字符串中,效果如下:
In [19]: string='Hello World!'
In [20]: print ('{:.4}'.format(string))
Hell
以上就是關于“怎么控制Python浮點數輸出位數”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。