2015-08-17 83 views
0

因此,經過一段時間閱讀了我的一些代碼之後,我一直得到這種奇怪的行爲,我根本無法脫身。爲什麼即使在使用float之後,Python 2.X分區也不能按預期工作

一段時間的尋找後,我發現下面的公式:

>>> print 425/(469/100) 

將返回106而不是~90。我一直在閱讀關於Python的這種行爲,並明確使用float希望有助於提高準確性。

>>> print 425/float(469/100) 

現在將返回106.25這不是太有用。進一步打破這件事後,我只是嘗試了以下內容:

>>> print float(469/100) 

這讓我吃驚返回4.0甚至沒有4.1(四捨五入)。我曾經遇到過Java,但還沒有用過Python。

即使我明確使用float爲什麼我收到這樣的結果?我不要求精確的精度,但它想ATLEAST 89和91

之間

這是用Python 2.7

+2

'469/100'仍爲整數除法。 –

+0

@MartijnPieters - 所以我猜我必須像這樣寫:'float(469)/ float(100)'。編輯:這的確是正確的..嘆氣:(。 – Juxhin

+0

)你需要劃分浮點數,而不是做整數除法,然後把結果變成浮點數,只要將其中一個變成「浮點數」就足夠了,你可以通過添加一個小數點來實現:'(469./100)'。 – TigerhawkT3

回答

2

float直到進行分割不叫; /不受調用它的上下文的影響,只受其接收的操作數影響。您需要將至少一個操作數轉換爲float,而不是結果。例如,

>>> print 425/(469/float(100)) 
90.618336887 
+0

是的,這是有效的。我把它放在錯誤的上下文中:) – Juxhin

+0

或者把數字(或者至少其中之一)寫成float:'print 425 /(469/100.0)' – GolezTrol

1

或者把

from __future__ import division 

爲你的程序的第一道防線。然後/是浮點除法,但你必須使用//獲得內部處理器分區

>>> from __future__ import division 
>>> 425/(469/100) 
90.61833688699359 
>>> 425 // (469 // 100) 
106 
+0

感謝您的選擇:) – Juxhin

相關問題