天天看點

如何強制除法為浮點數? 除數一直舍入到0? 如何在Python中強制除法為浮點數?

我有兩個整數值

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