[英]'float' object can't be interpreted as int, but converting to int yields no output
[英]Converting from Float to Int changed the output
我定義了一個簡單的sqrt
函數來計算給定數字的平方根。
def sqrt(n):
low = 0
up = n
for i in range(50):
mid = float(low+up)/2
if pow(mid,2) < n:
low = mid
elif pow(mid,2) > n:
up = mid
else:
break
return mid
當我做:
print(sqrt(9))
我得到3.0
作為輸出。 但是,當我這樣做時:
print(int(sqrt(9)))
我得到2
。
有人可以幫我理解為什么會這樣嗎?
謝謝你。
實際上, sqrt(9)
返回2.9999999999999973
[1],至少在 Python 3.5
版(也許所有3.x
?)中如此。 而int
只返回數字的整數部分。 這就是為什么你得到2
作為結果,因為2.9999999999999973
的整數部分確實是2
。
如果要將結果四舍五入到最接近的整數,可以執行round(sqrt(9))
產生3
。
[1] 要了解發生這種情況的原因以及如何解決此問題,您可以參考這篇文章。
這是因為四舍五入。 您的方法定義實際上將sqrt(9)
計算為2.9999999999999973
。 然而,舍入不適用於鑄造,因此小數點在int(2.9999999999999973)
的鑄造中丟失。 直接打印時,python 會應用舍入,使該值達到 3。
Python 2.7 輸出:
Python 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 21:01:17) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> def sqrt(n):
... low = 0
... up = n
... for i in range(50):
... mid = float(low+up)/2
... if pow(mid,2) < n:
... low = mid
... elif pow(mid,2) > n:
... up = mid
... else:
... break
... return mid
...
>>> sqrt(9)
2.9999999999999973
>>> print(sqrt(9))
3.0
>>> print(int(sqrt(9)))
2
>>>
如果要轉換為int
可以使用以下命令:
print(int(round(sqrt(9))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.