所以,我打開終端。數字如何在Python中工作?
> python
> 1/3
0
> 1.0/3
0.33333333333333331
有人能告訴我的規則是什麼,當涉及到小數。小數點時分號碼是重要的嗎?有最佳做法嗎?
如果我想要更多的小數點,或者更少,我需要使用一個函數嗎?
所以,我打開終端。數字如何在Python中工作?
> python
> 1/3
0
> 1.0/3
0.33333333333333331
有人能告訴我的規則是什麼,當涉及到小數。小數點時分號碼是重要的嗎?有最佳做法嗎?
如果我想要更多的小數點,或者更少,我需要使用一個函數嗎?
在Python <分工3.0作品就像在許多不同的編程語言和輸出是一個整數:
>>> 3/2
1
如果使用浮動爲部件的任何,輸出將是一個float還有:
>>> 3.0/2
1.5
>>> 3/2.0
1.5
但是有一個解決方案,如果你想更精確地做分割而不需要將某些部分轉換成float :
>>> from __future__ import division
>>> 3/2
1.5
經過上面你仍然可以通過使用雙斜線使 「經典師」:
>>> 3 // 2
1
是否足夠清晰?它有幫助嗎?
規則是,如果兩個輸入數字都是整數(無小數點),輸出將是一個整數,否則它將是一個浮點數。浮點精度由您的系統定義,如果您希望獲得更高精度,則需要使用庫。 Google arbitrary precision math python
。
如果你想劃分兩個字面整數並得到一個浮點數,那麼你給小數點哪一個並不重要,也沒有約定。這非常罕見,這不是太多人制定的規則。
在Python 2中,將int除以int總是將結果截斷爲int。但是,如果一個或兩個操作數都是浮點數,那麼你的答案是一個浮點數。
在選擇要顯示的小數點數方面,可以使用字符串的.format
方法(http://docs.python.org/library/string.html#formatspec)。
你爲什麼說「浮動或雙重「? Python只有一個浮點類型,它對應於double。 –
對不起,由於某種原因,我認爲Python包含了這兩種類型,我已經更新了我的答案,以反映Python只有一種浮點類型。 –
標準庫decimal
模塊提供「一種算術運算方式與人們在學校學習的算術方式相同」。見http://docs.python.org/library/decimal.html
這裏有一個字符串格式化文檔: http://docs.python.org/library/stdtypes.html#string-formatting
要控制數字的號碼,您可以使用
>>> print("%.10f\n" % 0.4)
0.4000000000
這裏我們告訴打印顯示10位數字。有關可用格式的更多詳細信息,請參閱format spec。
分區在python中有點混亂。的/
行爲取決於命令行選項:
$ python -Qnew
>>> 4/3
1.3333333333333333
>>> ^D
$ python -Qold
>>> 4/3
1
>>>
在新的語義/
總是產生一個float。 在舊版本中,如果兩個操作數都是整數,則它會生成一個int,如果至少其中一個是float,則會生成一個float。檢查您的python版本以確定哪一個是您的默認設置。要啓用新的語義,你也可以使用
from __future__ import division
注意,這裏也是截斷除法運算符://
,其將兩個數字,不論其類型的截斷的結果。如果參數都是int,它將返回一個int,如果其中至少有一個是float,則返回float。
> 5.0 // 3
1.0
> 5 // 3.0
1.0
> 5 // 3
1
此運算符的行爲不依賴於命令行選項。
默認情況下,在python2,我們有以下師的行爲:
在python3中,分割行爲已經改變,int/int返回float。這也可以通過添加以下導入在python2中啓用:
from __future__ import division
正如您可能已經注意到float division不精確。最後一位數字中的小錯誤可能會隨意發生。這是浮法數字在硬件級別上的表現方式。你可以閱讀more about it on wikipedia。
如果你想在蟒蛇精確算法它是可以做到的內置模塊decimal
:
>>> from decimal import Decimal
>>> Decimal('1')/3
Decimal('0.3333333333333333333333333333')
也有可能改變精度:
>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 50
>>> Decimal('1')/3
Decimal('0.33333333333333333333333333333333333333333333333333')
微小的額外注意:'3 // 2'在所有最新的Python版本中都適用於經典的劃分(正式的劃分),不論是或注意你有未來的說法。所以,如果你特別想要截斷行爲,就像那樣寫。 –
@ThomasK:是的,如果你在我的回答結束時需要他們,我寫了關於使用古典分區的文章,所以它應該足夠清楚。 – Tadeck
我知道 - 我只是想澄清一下,即使您未使用未來聲明,它的工作原理也是一樣的。 –