从浮点型转换为 Int 会更改输出



我定义了一个简单的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.9999999999999973sqrt(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))))

最新更新