如果計算中有一個(或多個)元素,它是否總是將結果轉換爲浮點數?我怎麼能確定什麼類型的python轉換爲?
例如:
1*1.0 # float
from fractions import Fraction
Fraction(1) * 1.0 # float
如果計算中有一個(或多個)元素,它是否總是將結果轉換爲浮點數?我怎麼能確定什麼類型的python轉換爲?
例如:
1*1.0 # float
from fractions import Fraction
Fraction(1) * 1.0 # float
我會說,如果其中一個參數是浮動,它總是會強制浮動,因爲float是最常見的數字類型。所以如果你用浮點數和其他數字解釋器進行一些操作(在你的情況下乘法),可以肯定它可以將其他數字轉換爲浮點數(不管它是int,Fraction還是Bool)而不丟失任何信息,但它不能以其他方式做到這一點。
這是鏈接(https://docs.python.org/2.4/lib/typesnumeric.html) 它暗示了我明顯的東西,我忘了。複數比Float更通用。所以,如果你會嘗試乘法浮動複雜。你會變得複雜。
「Python完全支持混合算術:當二進制算術運算符的操作數具有不同的數值類型時,具有」窄「類型的操作數會擴展到另一個操作數,其中純整數比長整數窄比浮點窄比比較複雜,比較混合類型的數字使用相同的規則。「
沒有,它的工作原理是因爲分數類實現用於與其他對象(浮在你的情況下)定義了一個乘法的結果__mul__
(可能__rmul__
)方法。
這就是所謂的操作符重載。
編輯:我不明白爲什麼我downvoted。根據你的例子,答案是不,你不總是得到一個浮動,它取決於其他對象。
例如,可以在Python餾分源代碼中看到的__mul__
和__rmul__
實現:https://hg.python.org/cpython/file/tip/Lib/fractions.py#l421且確實的計算功能:https://hg.python.org/cpython/file/tip/Lib/fractions.py#l377。
謝謝你的回答。我想知道你能否指出我的任何相關文件。謝謝 – galaxyan
編輯答案,提供鏈接和報價 –