浮点限制

时间:2009-01-02 09:17:27

标签: python floating-point precision floating-accuracy

我的代码:

a = '2.3'

我想将a显示为浮点值。

由于a是一个字符串,我试过:

float(a)

我得到的结果是:

2.2999999999999998

我想要解决这个问题。请帮助我。

我关注this tutorial

3 个答案:

答案 0 :(得分:18)

我认为它更多地反映了您对浮点类型的理解,而不是Python。有关此“不准确”背后的原因,请参阅my article about floating point numbers(基于.NET,但仍然相关)。如果您需要保留精确的十进制表示,则应使用decimal module

答案 1 :(得分:6)

这不是python的缺点,而是浮点数存储在计算机上的方式的缺点。无论实现语言如何,您都会发现类似的问题。

你说你想'显示'A作为一个浮点,为什么不显示字符串?在视觉上它将与您期望的相同。

正如Jon所提到的,如果您的需求不仅仅是“显示”浮点数,您应该使用十进制模块来存储精确的表示。

答案 2 :(得分:4)

解释原因的优秀答案。我只想在标准库中添加一个可行的实用解决方案:

>>> from decimal import Decimal
>>> a = Decimal('2.3')
>>> print a
2.3

这实际上是一个(非常)F.A.Q.对于Python,你可以read the answer here

<小时/> 编辑:我刚刚注意到John Skeet已经提到了这一点。哦,好吧......