看看这个:
print 41063625 ** (1.0/3) # cube-root(41063625) = 345
print int(345.0)
print int(41063625 ** (1.0/3))
Run Code Online (Sandbox Code Playgroud)
它输出:
345.0
345
344
Run Code Online (Sandbox Code Playgroud)
我期待最后一行345,因为我期望int(41063625 ** (1.0/3))等于int(345.0)反过来345,正如其他两个输出所表明的那样.但是,显然情况并非如此.谁能给我任何关于这里发生了什么的见解?
unu*_*tbu 12
打印(或更确切地说float.__str__)是对输出进行舍入.
In [22]: str( 41063625 ** (1.0/3) )
Out[22]: '345.0'
Run Code Online (Sandbox Code Playgroud)
浮点表示
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
Run Code Online (Sandbox Code Playgroud)
如果你想要最接近的int,你可以使用round:
In [18]: round(41063625 ** (1.0/3))
Out[18]: 345.0
Run Code Online (Sandbox Code Playgroud)
或者,得到一个int:
In [19]: int(round(41063625 ** (1.0/3)))
Out[19]: 345
Run Code Online (Sandbox Code Playgroud)