簡體   English   中英

Python奇怪的int行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM