Python max()未返回正确的最大值

Python max()未返回正确的最大值,python,floating-point,Python,Floating Point,我使用以下代码来找出这两个数字中哪一个具有最大值: maximum = max(2.3,2.300000000001) print maximum 但是我得到的输出是2.3,而不是2.3000000000001。有人能解释为什么会发生这种情况吗?通过与以下Python代码等效的代码实现“绝对或相对差异”检查:() def近似相等(x,y,ε): “”“如果y在x的相对或绝对‘ε’范围内,则返回True。”。 默认情况下,“ε”为1e-6。 """ #检查绝对精度。 如果-epsilon不用担

我使用以下代码来找出这两个数字中哪一个具有最大值:

maximum = max(2.3,2.300000000001) 
print maximum
但是我得到的输出是
2.3
,而不是
2.3000000000001
。有人能解释为什么会发生这种情况吗?

通过与以下Python代码等效的代码实现“绝对或相对差异”检查:()

def近似相等(x,y,ε):
“”“如果y在x的相对或绝对‘ε’范围内,则返回True。”。
默认情况下,“ε”为1e-6。
"""
#检查绝对精度。

如果-epsilon不用担心-
max
没有被破坏,并且
max
确实保持
2.3000000000001
<代码>打印
,但打印时会将其四舍五入。你可以用来证明:

>>> maximum = max(2.3,2.300000000001) 
>>> print maximum
2.3
>>> print repr(maximum)
2.300000000001
发件人:

14。浮点运算:问题和限制

很容易忘记,存储的值是 原始小数,因为浮点数是 在解释器提示下显示。Python只打印一个小数 二进制近似值的真十进制值的近似值 由机器存储。如果Python要打印真正的十进制值 对于存储为0.1的二进制近似值,它必须显示

>0.1

0.10000000000000055115123125782702118158340451015625

这比大多数人认为有用的数字还要多,因此Python保留了 通过显示舍入值来管理的位数

>0.1

0.1

回答:您得到的结果很好,但是
print
rounds

您可以通过以下方式检查实际值:


Python print命令自动截断数字。上面的评论中有一些解释。如果您希望它打印完整值,请尝试使用
打印“%13f”%maximum
来显示完整值

在您的情况下,正如mureinik所说,只有打印是问题的原因。更直接的例子是:

>>> a = 2.300000000001
>>> a
2.300000000001
>>> print(a)
2.3
但请注意,Python使用其平台的底层浮点,并且它的精度不是有限的。根据经验,只有16位十进制数字是准确的:

>>> b = 2.300000000000000001
>>> b
2.3
>>> c = 2.3
>>> b == c
True

您得到的输出是2.3000000000001
print
为您提供了详细说明。这里可能重复了关于print函数截断浮点值的原因的详细说明。请使用repr()作为python中的内置函数
>>> a = 2.300000000001
>>> a
2.300000000001
>>> print(a)
2.3
>>> b = 2.300000000000000001
>>> b
2.3
>>> c = 2.3
>>> b == c
True