[英]problems with number of digits in float numbers in python
当我尝试使用radius
值作为字典中的键时,我收到一条错误消息KeyError: 0.73780000000000001
(这是当前radius的值...请参见下文):代码看起来像这样:
for n in range(len(myarray)):
radius = (np.sqrt(x[n]**2 + y[n]**2))
x
和y
的值是带有四个小数的浮点数,例如:
-25.9166 71.0444
我试图用以下方法削减小数:
for n in range(len(myarray)):
radius = (int(np.sqrt(x[n]**2 + y[n]**2))*10000)/10000.0
我不明白为什么它0.73780000000000001
这个奇怪的值0.73780000000000001
我0.73780000000000001
首先,我不太了解您的问题:
>>> (np.sqrt(x**2 + y**2))
75.623917690899873
>>> (int(np.sqrt(x**2 + y**2))*10000)/10000.0
75.0
其次,作为@弗雷德里克-哈米迪告诉,你应该了解更多的浮点算术,又称IEEE754的数字 ,这是建立这种方式:
这是基于二进制的“科学符号”的构建。 这样做的好处是,它可以实现非常广泛的float表达式,不好的是,您可能会遇到感觉不自然的近似值,但这是因为它使用二进制指数表示法而不是十进制表示法有意义。 此外,您可能会得到类似NaN
(非数字)或无穷大的值。
尽管您给我们的计算没有给出0.73780000000000001
,但该数字恰好是您可以通过IEEE754计算获得的近似值。 (尽管我不会研究如何获得它)
最后,您不应将浮点数用作键。 相反,使用可以使用的整数表示形式:
>>> (int(np.sqrt(x**2 + y**2))*10000)/10000
75
删除最后一个分数的.0
,这样就不会使左侧整数浮起来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.