[英]Using integer division in Python
您能幫我弄清楚這個Python部門嗎
基數= 12.0
高度= 16
面積= 1/2 *基礎*高度
解決方案對此表示
面積=(基數*高度)/ 2;
讓我感到困惑的是1/2將是浮點數,而Python將僅顯示0而不是0.5,為什么在這種情況下解決方案顯示/ 2 ...
Python2.7自動將/
運算符用作整數(整數)除法,該運算符將始終產生整數。
例如:
1/2 = 0
3/4 = 0
100/30 = 3
要進行浮點除法,您必須將一個或兩個值作為浮點類型。
像這樣:
Area = 1.0/2 * Base * Height # 1.0 is a float type, 1 is an integer type
結果不是您期望的,因為Python使用整數除法和運算順序來評估表達式。
如果您在Python中評估16 * 12 / 2
,Python會將其解釋為(16 * 12) / 2
或192 / 2 = 96
如果您評估1/2 * 16 * 12
,Python會將其解釋為(((1/2) * 16) * 12)
= (0 * 16) * 12
進一步的例子:
Area = Base * Height * (1.0/2.0)
蟒求值(1.0 / 2.0) 第一此時,由於操作的順序決定了括號首先評估。 而且由於1.0和2.0是浮點數而不是整數,因此Python可以執行浮點除法。 你得到這個:
Base * Height * (0.5)
= 192 * 0.5
= 96
,它給您您所期望的。
相反:
Base * Height * (1/2)
= Base * Height * (0) # since 1/2 rounds down to 0 in integer division
= 192 * 0
= 0
Carpetsmoker的替代解決方案:
from __future__ import division
此行將為您提供Python2.x程序中的Python3.x行為,並且Python3.x接受/
運算符作為浮點除法,即使兩個值都是整數類型也是如此。 因此,在導入后, /
成為浮點除法運算符。
>>> from __future__ import division
>>> 1/2
0.5
整數除法是將一個人的余數簡單地丟棄的地方。 將7分成3,將得到3堆2,剩下一個,因此:
7 / 3 = 2
Python有兩種常用的數字類型:只能表示整數的整數和可以表示十進制數的浮點數。 傳統上,在許多編程語言(C,Java等)中,對相同類型的兩個對象執行基本操作(例如+
, -
, *
或/
將為您提供該類型的另一個對象。 如果它們不同,則將其中一個對象安全地類型轉換為更通用的形式。 這通常會導致一個整數(該整數不能表示分數)被轉換為可以的浮點數。 然后將兩個浮子分開,產生另一個浮子。
因此,在Python 2中,當您將運算符/
與兩個整數一起使用時,結果將是一個整數。 1/2
為0.5
,但小數部分被舍棄,因此您剩下0
。
但是,在Python 3中,修改了/
總是將其強制轉換為浮點數,從而導致真正的除法。 1/2 = 0.5
,而2/1 = 2.0
。 對於新程序員,這是“預期的”行為,可以為現有程序員提供更清晰的代碼。 通過在腳本頂部添加將來的導入 ,可以在Python 2中模擬此新行為:
from __future__ import division
如果您確實希望在Python 2.5+或3.x中進行截斷,則可以使用新的//
運算符來模擬舊的/
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.