『壹』 python中格式化輸出的問題求解,謝謝
:2d表示:右對齊,寬度為2
:6.4f表示:右對齊,寬度為6,且保留小數點後4位
使用":", 指定代表元素需要的操作。format格式化函數中,使用 {} 和 : 來代替Python2.6版本以前的 %
d表示十進制整數,f表示浮點數
.4和6.4的區別在於,後者指定了數據寬度。你如果把這句的6.4改成20.4,就會看出差別來了
『貳』 當使用print語句輸出時,Python將所有浮 點數字格式化為小數點後兩位。對嗎
不會的,要配合format格式化輸出。
x = 10/3
print(x)
print('{:.2f}'.format(x))
『叄』 關於python浮點數的精度及其造成的問題
在解決學術問題的過程中,Python因為其易用性和語法的簡潔性而受到歡迎。然而,在某些實際問題中,由於Python默認的浮點數精度是雙精度(64位),直接用此精度會出現非常大的問題。例如,回代根到等式發現等式不成立(從而造成恐慌)。本文記錄了一種筆者找到的可能的解決方法用於解決Python精度不夠的問題。
Python的默認浮點數是雙精度。不過不論是什麼精度,浮點數在計算機中都是以二進制保存。這就導致了在有限精度下,電腦為自己把精度范圍外的小數「掐掉」,導致結果不準確。以下筆者展現一個經典的例子,0.1 + 0.2,其結果為0.30000000000000004,而不是0.3。
經過一些搜索,發現NumPy提供一個相對更高精度的數值類型numpy.float128()(或者numpy.longdouble(), numpy.longfloat()),它的精度比64位「稍高」。使用numpy.float128()之後,輸出的結果更加接近真實值0.3。
這會導致什麼問題?在大多數情況下(姑且如此說,畢竟我至今第一次遇到這個問題),不會有很大影響。但這不代表這個問題可以忽略。例如在使用SymPy求解方程時,如果直接使用默認浮點數,得到的結果並不能使等式兩邊成立。
我們首先嘗試將64位浮點數替換為128位浮點數,但不幸的是,這種方法得到的精度提升有限。方程兩邊仍然無法成立。
通過搜索和求助,我得知了使用decimal包的方法。使用十進制數,這樣應該就可以表示准確的小數了。但是如果直接使用SymPy去解方程,仍然不能得到精確結果!我推測SymPy仍然使用了浮點數。
在已知方程系數的情況下,求解方程的根有兩種方法。一種是直接使用求根公式,適用於四次及以下的多項式方程。另一種是數值法,可以得到一個自定精度的估計值。
由於Python的decimal包中的Decimal類型的特殊性,許多常用的運算方法並不適用此類數值。接下來記錄幾種我從官方文檔和Wikiversity中找到的常用運算方法。
來自Python官方文檔:
來自Wikiversity:
可能有讀者會好奇,為什麼要摘錄arctan()。原因是需要進行復數運算!在次數為2、3、4的一元方程中,非常容易出現復數。我針對自己的問題,對arctan()函數進行了一定的修改,並實現了能夠進行復數運算的幾種方法。此外,還定義了判斷兩個數是否相等的函數if_eq()。
到目前為止,我們已經能解決高達四次的一元方程。然而,對於大於或等於五次的多項式來說,現有方法似乎仍然顯得黔驢技窮。
在沒有求根公式的情況下,數值方法是一個解方程實根的很好途徑。我使用了牛頓法來解決問題。參考Kong等人的在線書籍,代碼實現如下,
到此為止,我們可以嘗試一下,能否使用現有知識求解本文最初設置的方程。首先使用求根公式法,成功得到了方程的解!通過觀察可得,僅僅是小數後被掐掉的部分不同,就會造成等式兩邊產生極大(絕對來說,非相對)的不同!
其次,嘗試牛頓數值法。
可以看到,數值法的缺陷是需要設置不同的初值,才能得到不同的實根。但優點是,在計算機性能支持的前提下,可以逼近任意方程的某個根。可能有些讀者會好奇,此處的「-10000000000000000000000」為何不需要將其進行「十進制化」?原因是在Python中,整數是精確的,不精確的只是浮點數。
本文討論了在某些特殊方程中因為Python浮點數不夠精確而導致的結果不精確的問題。當對結果的精度要求較高或者根的量級非常大時,推薦使用先求初值、再求精確值的方法進行求解。
『肆』 python裡面的這個8和15分別代表什麼呀
這種題目,自己上機測試,會比較好理解,程序設計要多動手。
:>15s 是向右對齊,最小寬度15個字元(即不足15個字元會以空格補足15個字元)
:<8.2f是向左對齊,最小寬度8個字元,小數2位