[英]Python strange int behavior
看看這個:
print 41063625 ** (1.0/3) # cube-root(41063625) = 345
print int(345.0)
print int(41063625 ** (1.0/3))
它輸出:
345.0
345
344
我期待最后一行是345
,因為我期望int(41063625 ** (1.0/3))
等於int(345.0)
反過來等於345
,正如其他兩個輸出所示。 但是,顯然情況並非如此。 誰能給我任何關於這里發生了什么的見解?
打印(或者更確切地說, float.__str__
)將輸出四舍五入。
In [22]: str( 41063625 ** (1.0/3) )
Out[22]: '345.0'
41063625 ** (1.0/3)
的浮點表示小於345,因此當你取得它的int
時,你得到344而不是345。
In [15]: 41063625 ** (1.0/3)
Out[15]: 344.9999999999999
In [16]: int(345.0)
Out[16]: 345
In [17]: int(41063625 ** (1.0/3))
Out[17]: 344
如果你想要最接近的int,你可以使用round:
In [18]: round(41063625 ** (1.0/3))
Out[18]: 345.0
或者,獲得一個int
:
In [19]: int(round(41063625 ** (1.0/3)))
Out[19]: 345
因為41063625 ** (1.0/3)
不是345.0:
In [7]: 41063625 ** (1.0/3)
Out[7]: 344.9999999999999
In [8]: int(344.9999999999999)
Out[8]: 344
那么,我從計算中得到的是這樣的:
>>> 41063625 ** (1.0/3)
344.9999999999999
>>> int(345.0)
345
>>> int(41063625 ** (1.0/3))
344
所以獲得344是絕對正確的。 浮點數的內部表示缺乏一定的准確性,因此轉換為int
將始終給出底值。
您可以使用round()
函數來獲得更合理的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.