2009-11-24 36 views
8

考慮:爲什麼這個分區不能在Python中工作?

>>> numerator = 29 
>>> denom = 1009 
>>> print str(float(numerator/denom)) 
0.0 

我如何讓它返回一個小數點?

+1

有點旁觀,但'float'與Python標準庫中的'Decimal'類型不同。當你說「我只是想要它返回一個小數」你真正的意思是「我只是希望它返回一個字符串表示小數的十進制符號」,對吧? – 2009-11-24 01:38:44

回答

24

直到版本3,Python的除法運算符/,在提供兩個整數參數時表現得像C的除法運算符:它返回一個整數結果,當有小數部分時,結果被截斷。請參閱:PEP 238

>>> n = 29 
>>> d = 1009 
>>> print str(float(n)/d) 
0.0287413280476 

在Python 2(或更早也許)你可以使用:

>>> from __future__ import division 
>>> n/d 
0.028741328047571853 
+0

-7 // 3 = -3(餘數是= 2)在Python中和-7/3 = -2(餘數= -1)在C/C++中,所以我不會說這種行爲在Python中與C中相同/ C++ – Artur 2017-05-17 09:51:34

7

在Python 2.x中,師就像在C類語言的作用:如果兩個參數是整數,結果被截斷爲一個整數,因此29/1009爲0,因爲float爲0.0。爲了解決這個問題,轉換爲浮動分割前:

print str(float(numerator)/denominator) 

在Python 3.x中,該部門的行爲更自然,所以你會得到正確的數學結果(浮點誤差範圍內)。

0
print str(float(numerator)/float(denom)) 
+0

將任一操作數強制轉換爲float()就足夠了。我通常建議在分子的表面開始處放置分子,讀者通常會更容易看到它。 – 2009-11-24 05:55:55

+0

是的,但這對我來說似乎更「恰當」,只是因爲它在演員中更加透明。但是,單獨鑄就一個就夠了。 – inspectorG4dget 2009-11-24 06:59:17

1

在您的評估中,您正在施放結果,您需要改爲施放操作數。

相關問題