我定义了一个简单的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] 要了解为什么会发生这种情况以及如何解决此问题,您可以参考这篇文章。
这是因为四舍五入。您的方法定义实际上计算了要2.9999999999999973
sqrt(9)
。但是,舍入不适用于铸造,因此在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))))