繁体   English   中英

浮点数在Python中的位数的问题

[英]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))

xy的值是带有四个小数的浮点数,例如:

-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.737800000000000010.73780000000000001

首先,我不太了解您的问题:

>>> (np.sqrt(x**2 + y**2))
75.623917690899873
>>> (int(np.sqrt(x**2 + y**2))*10000)/10000.0
75.0

其次,作为@弗雷德里克-哈米迪告诉,你应该了解更多的浮点算术,又称IEEE754的数字 ,这是建立这种方式:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM