簡體   English   中英

在Python中使用整數除法

[英]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) / 2192 / 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/20.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM