Python 2.7 Python:返回的浮点值不正确

Python 2.7 Python:返回的浮点值不正确,python-2.7,Python 2.7,我有一个Python函数,如下所示: def point_double((xp,yp)): s=(3.0*pow(xp,2)-1)/(2.0*yp)#s=2.6 xr=pow(s,2)-(2*xp)#xr=0.76 yr=s*(xp-xr)-yp#yr=0.824 回报率(xr,年) 当我调用point\u double((3,5))时,我得到的返回值是(0.7600000000000007,0.82399999981),而不是正确的(0.76,0.824) 在返回行打印所需结果之前添加pri

我有一个Python函数,如下所示:

def point_double((xp,yp)):
s=(3.0*pow(xp,2)-1)/(2.0*yp)#s=2.6
xr=pow(s,2)-(2*xp)#xr=0.76
yr=s*(xp-xr)-yp#yr=0.824
回报率(xr,年)
当我调用
point\u double((3,5))
时,我得到的返回值是
(0.7600000000000007,0.82399999981)
,而不是正确的
(0.76,0.824)

在返回行打印所需结果之前添加
print xr,yr
,但将其更改为
print(xr,yr)
打印不正确的值


有人能给我解释一下为什么会发生这种情况,并帮助我克服这种情况,使函数返回所需的值吗?好的,有两件事-首先是计算机不能很好地表示某些数字(如1/3),其次是“打印”是如何操作代码的:

因此:

这将产生:

0.76
0.824
(0.7600000000000007, 0.8239999999999981)
你应该考虑这样打印一点:

print (" x: %s y: %s" % (xr, yr))
我很难在print中找到它在print中如何调用
str()
,因为在2.7中它是一个内置的。通过使用%或string.format,可以有效地强制执行和控制浮点的呈现方式

注意到:


打印对象时,将调用其str()方法。这个 元组(或任何其他内置集合)的str()方法为集合中的每个项调用repr()

请注意,xr的实际值较长且不准确


编辑:这是一个很好的指南(适用于python 3),介绍如何存储浮点以及打印浮点的其他方法,或者xp**2代替浮点pow也有帮助。浮点错误部分有道理,但是任何人都可以解释为什么
print xr
返回
0.76
,但是return语句给出
xr=0.7600000007
不是返回,而是打印(即,您的代码是“ok”)。从我下面的回答中可以看出:基本上,如果你调用它,那么显式地打印xr和yr,它们将被缩短,而如果你打印元组,它们将变长。当你打印一个对象时,它的
\uu str\uu()
方法被调用。元组(或任何其他内置集合)的
\uu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
方法为集合中的每个项调用
。令人沮丧,但很有帮助!
print (" x: %s y: %s" % (xr, yr))