我有兩個整數值
a
和
b
,但是我需要它們在浮點數中的比率。 我知道
a < b
并且我想計算
a / b
,是以如果我使用整數除法,我總是得到0,剩下
a
。
下面如何在Python中強制
c
為浮點數?
c = a / b
#1樓
c = a / (b * 1.0)
#2樓
您可以通過執行
c = a / float(b)
來強制轉換為float。 如果分子或分母是浮點數,則結果也将是。
注意事項:如評論者所指出的,如果
b
可能不是整數或浮點數(或表示一個的字元串),則這将無效。 如果您要處理其他類型(例如複數),則需要檢查這些類型或使用其他方法。
#3樓
在Python 2中,兩個整數的除法産生一個整數。 在Python 3中,它産生一個浮點數。 我們可以通過從
__future__
導入來獲得新的行為。
>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663
#4樓
在Python 3.x中,單斜杠(
/
)始終表示真實(非截斷)除法。 (
//
操作符用于截斷除法。)在Python 2.x(2.2及更高版本)中,您可以通過将
from __future__ import division
在子產品頂部。
#5樓
這也可以
>>> u=1./5
>>> print u
0.2
#6樓
如果要預設使用“ true”(浮點數)除法,則有一個指令行标志:
python -Q new foo.py
有一些缺點(來自PEP):
有人認為,更改預設值的指令行選項是有害的。 如果使用不當,肯定會很危險:例如,不可能将需要-Qnew的第三方庫軟體包與需要-Qold的第三方庫軟體包組合在一起。
您可以通過檢視python手冊頁了解有關更改/警告除法行為的其他标志值的更多資訊。
有關除法更改的詳細資訊,請閱讀: PEP 238-更改除法運算符
#7樓
添加一個點(
.
)以表示浮點數
>>> 4/3.
1.3333333333333333
#8樓
from operator import truediv
c = truediv(a, b)
#9樓
如何在Python中強制除法為浮點數?
我有兩個整數值a和b,但是我需要它們在浮點數中的比率。 我知道a <b并且我想計算a / b,是以如果我使用整數除法,我總是得到0并得到a的餘數。
下面如何在Python中強制c為浮點數?
這裡真正要問的是:
“如何強制真除以使
a / b
傳回小數?”
更新到Python 3
在Python 3中,要進行真正的除法,隻需執行
a / b
。
>>> 1/2
0.5
地闆除法(整數的經典除法行為)現在
a // b
:
>>> 1//2
0
>>> 1//2.0
0.0
但是,您可能無法使用Python 2,或者編寫的代碼必須能同時在2和3中使用。
如果使用Python 2
在Python 2中,它不是那麼簡單。 處理經典Python 2分區的某些方法比其他方法更好,更可靠。
對Python 2的建議
您可以在任何給定的子產品中獲得Python 3劃分行為,并在頂部輸入以下内容:
from __future__ import division
然後将Python 3樣式劃分應用于整個子產品。 它也可以在任何給定的點在python shell中工作。 在Python 2中:
>>> from __future__ import division
>>> 1/2
0.5
>>> 1//2
0
>>> 1//2.0
0.0
這确實是最好的解決方案,因為它可以確定子產品中的代碼與Python 3向前相容。
Python 2的其他選項
如果您不想将其應用于整個子產品,則隻能使用一些解決方法。 最受歡迎的是将其中一個操作數強制為浮點數。 一種可靠的解決方案是
a / (b * 1.0)
。 在新的Python Shell中:
>>> 1/(2 * 1.0)
0.5
operator
子產品
operator.truediv(a, b)
truediv
也很健壯,但這可能會更慢,因為它是一個函數調用:
>>> from operator import truediv
>>> truediv(1, 2)
0.5
不建議用于Python 2
常見的是
a / float(b)
。 如果b為複數,則将引發TypeError。 由于定義了複數除法,是以對我來說,在為除數傳遞複數時,除法不會失敗。
>>> 1 / float(2)
0.5
>>> 1 / float(2j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float
對我來說,故意使您的代碼更脆弱沒有太大意義。
您還可以使用
-Qnew
标志運作Python,但這不利于執行具有新Python 3行為的所有子產品,并且您的某些子產品可能需要經典的劃分,是以除測試外,我不建議這樣做。 但要示範:
$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j
#10樓
from operator import truediv
c = truediv(a, b)
其中a是除數,b是除數。 當兩個整數相除後的商是浮點數時,此函數非常友善。
#11樓
僅以浮點格式進行除法的任何參數也會産生浮點輸出。
例:
>>> 4.0/3
1.3333333333333333
要麼,
>>> 4 / 3.0
1.3333333333333333
要麼,
>>> 4 / float(3)
1.3333333333333333
要麼,
>>> float(4) / 3
1.3333333333333333